Some people would argue, that #XMPP is broken, too, esp. the #OMEMO 1 vs. OMEMO 2 situation. But it is probably less broken than Matrix, and definetively better to fix due to its extensible protocol design…
I'm using #slidge by @nicoco to use Matrix from my #Jabber client. Can't say, if it is better than the #ejabberd solution, b/c I never tried the latter. But works for me! But have at least one client with adhoc commands available, e.g. #Gajim or #Profanity!