> You can send lots of requests to a server and you have to tag them so you can match them up with responses later
Yes, you can match the final OK/NO/BAD responses with the original command based on the tag. The annoying thing is that each command typically sends most of its data in "untagged responses". And IMAP servers can send unsolicited untagged responses at any time too. It's quite tricky to handle all those responses correctly in email clients. Indeed, normally you just want to send a command, and get all the data for that command back until the finishing response. IMAP clients typically open multiple connections to isolate commands.
Oh shit, of course. The main thing is you can't rely on a double \r\n to terminate a response; you have to track the tag, and yeah it's mega annoying. But multiple connections fixes that, wow.