/sockpause doesn't seem to pause the way I expected, if I am receiving data and I want to signal the sender to stop for a bit, it doesn't, I keep receiving sockread events.
In this case, if I have 2 sockets in cascade (aka proxy) I don't have many ways to avoid losing data but to write the extra information in file or memory until the "client" free some space in send buffer (I don't want to exceed the max of 16k bytes).
Basically I found that receive queue is a bigger then 16k bytes.

You cannot prevent a client from sending data, /sockpause only stop the on sockread event from triggering for that socket.
Pausing the socket doesn't stop mIRC from receiving data from the socket, when you resume the socket, the data is there, you don't lose anything using /sockpause
The receive buffer can be of any size in theory, it's not important, you are not limited by this but by the send buffer. /sockpause simply isn't what you need and works fine.
Note that if the send queue is empty, you can send more than 16384 bytes, might be a bug.

Looking for a good help channel about mIRC? Check #mircscripting @ irc.swiftirc.net