I will say that the middle layer is not great. I have an XMPP bot and the "interaction with the network" stuff really is ugly and unfun.
I think the protocol itself is... I mean it's fine, I guess? Protocols are tricky because a lot of stuff is bolted on and it's not really super stateless as a protocol. But like all the Python XMPP client libs (for example) are all real janky.
The protocol is complex enough to where the "simple and easy" client libs require way more up front design.