Is it appropriate to use canonical mode here, or is canonical mode usually reserved for interactive terminals?
Yes, you can use canonical mode, but you will need to configure the termios interface for your situation.
The default termios configuration is for an interactive terminal, so features such as echoing the input should be disabled.
Since your device is unlikely to send the backspace and delete characters, such features can be ignored.
The examples I find online all use raw mode.
Seems like there are some "experts" that are not aware that canonical mode for terminals exists.
See the comments to reading from serial port in c breaks up lines .
For an example of (blocking) canonical mode, see this answer (note that there's another "expert comment" telling the OP that he cannot read lines).
In particular, in canonical mode, how do I check without blocking if an entire line is available for reading.
You could use select().
The man page implies that a canonical read of a terminal device is supported:
The file descriptors listed in readfds will be watched to see if characters become available for reading (more precisely, to see if a read will not block ...)
When both fields of the timeval structure are zero, then select() will not block and returns immediately.