My main problem with your proposed change is that it forces
sendMessage() to block in the common case until the reply timeout has passed. I doubt that this is a good idea. (There is also a slim chance that the error listener will catch false positives).
I would simply create a listener for message error responses from the MUC. Then the user can decide to setup such a listener.