Its best to use a protocol that doesn’t allow unencrypted messages
This is an implementation thing and not a protocol thing. What protocol doesn’t allow unencrypted messages? I am sure signal’s protocol would still allow it, it’s just that the implementation doesn’t.
And same for XMPP. Just go with the implementation that doesn’t.
It may be one of the better solutions, but there are certainly privacy implications