Luck or not, in practice, the quit message was always seen by the IRC server, I just tested it with mIRC 6.35, I can reproduce 100% of the time (ok I'll admit that might not be a sign of anything since I'm probably not having any problem with my network, but the tests shows mIRC 6.35 doesn't behave the same, consistently, nonetheless) it will, somehow, wait for the message to be sent on the socket before exiting.
Since there is no documentation that exiting (even manually) the application will do X or Y, I think it's normal for people to assume the behavior being there for years is the correct behavior (you often go that way), and the behavior to be seen was that the QUIT message was sent correctly.
What you are requesting is: if mIRC has server connections open and you try to exit mIRC, you want mIRC to not exit immediately but instead to remain open, freeze the GUI to prevent further input, and wait for confirmations from all open server connections that they have received your QUIT message. Note that this could take anything from a second to several minutes, depending on the network state, server lag, and so on. I could make it so that mIRC only remains open for five seconds at most, however that is still no guarantee that the server will receive the message.
Yes, although I'm not sure you need to wait anything from the server, just wait for the sending queue of the socket (mIRC-wise, $sock().sq) to be 0 (if that's what you meant with "confirmations from all open server", nevermind then). I'm good with "waiting 5 secs at most", you could make that 3 secs even, in my opinion. I really think it's normal for an application like mIRC to wait for the QUIT message to be sent, at least I think mIRC should offer that possibility for users who can afford to wait 2 secs when exiting. I'd be good if the default was to exit right away and a new options in alt + o and a new switch for /exit was added