the biggest problem with X is that it frequently takes a _lot_ of round trip messages to do standard things. each application that starts needs to do these same things, and each different display that you connect to may give you different answers
on signficant thing that NX does is to provide a local server to act as a proxy for these sorts of things, if it knows the answers already it provides them without having to actually go and ask the display.
'fixing the X protocol' to do the same thing would end up looking very similar, a local daemon that local applications think is their display, that then remembers the answers from prior requests.
you can't eliminate these calls without eliminating backwards compatibility, and so far nobody has been willing to do that.