If you are sending commands to a shell program that returns a prompt, say "$" after you send a command, than you certainly could wait until you see the "$" before sending the next command. This is very rudimentary protocol but should work just fine.
To avoid having to worry about "$" being in the echoed data from the console turn echo off on the console or change the prompt to something unlikely to be in the echoed data.
Technically you could make use of the console input buffer (typeahead) by sending a batch of commands with a length less than the input buffer (you would have to test this) like cmd1[cr]cmd2[cr]cmd3[cr] but then don't send any more untill you get back [cr]$[cr]$[cr]$. The [cr] may need to be [cr][lf] and "$" may actually be "$ " depending on how the console works.
With XONN/XOFF turned on you could technically check for XOFF to stop sending and then resume when you see the XONN but I would not recommend this if you are sending to a command console. You would need to make sure the XONN/XOFF buffer matched the console input buffer and that would be more complicated indeed.