The default `talk` and talk service were trash, and often there were protocol errors that would cause you to hang forever, vainly waiting for an answer (classic talk used UDP only.)
Eventually, a few competing offerings sprang up, in the form of `ntalk`, `xtalk` and `ytalk`. These were superior in every way, and sometimes required swapping out the service attached to inetd. Once you did that, it was a fantastic way to chat live and direct on Unix. Way better than the `write` we started with!
The same reason tar and dd and practically everything operates on blocks not bytes, plus the same reason the shell doesn't act until eol delimiter, the opportunity to edit before submit.
I think talk could get away with it because on a shared local host both sides are accessing the same local physical resource directly, no tcp packet per byte.