I fully agree on this. But your assumption that you have to go 'outside' when using MQTT is completely wrong. You can, and this is how I have my own setups at home, have one or more so called MQTT brokers locally on your network with no dependencies to the outside. There is nothing that will break suddenly, you decide yourself if & when you would like to update the broker or client software. With MQTT the backward compatibility is key.in my personal belief if something in my home wants to communicate with something else in my home then it shouldn't have to go out onto the internet to do so.
The advantage in using MQTT is that you do not need to bother & be worried about many of the things you are mentioning; like client re-connections, getting latest event when connecting, event priorities etc. MQTT software is based on an open standard, provided as open source so there is no risk for any company bankruptcy either.
As for setup & installation, it is not much more complicated than with other software's, there are setup packages for most common platforms, but you have to think differently, it is not a peer-to-peer communication. It is so much better; you have a broker providing data and clients subscribing & publishing. Myself, in my own setups, I have decided to run MQTT brokers under Linux in Raspberry Pi's. This has proven to be rock-solid.
When writing a plugin, you easily embed the MQTT for communication, a good example is my MQTT Client plugin. If it becomes complicated for the end user (or not) is more depending on you as author of the plugin. From my perspective, you may use code from my plugins as you like, they are free software released under GNU (see below).
EDIT: I just forgot one thing, it makes sense not making the plugins too complex, better split the functionality into several plugins and use macros/events/actions. Some of mine are too complex, like SunTracker. But it was one of the first stumbling ones, originating back in 2008 if I remember correctly
Best regards, Walter
The Foundations of the GPL
Nobody should be restricted by the software they use. There are four freedoms that every user should have:
the freedom to use the software for any purpose,
the freedom to change the software to suit your needs,
the freedom to share the software with your friends and neighbors, and
the freedom to share the changes you make.
When a program offers users all of these freedoms, we call it free software.