I agree with all of your recommendations. I use Home Assistant running in a VM on a normal machine as a sensor fusion platform and for dashboards. Every non-trivial thing is then an AppDaemon[1] app running in a separate VM on the same machine. I have zwave devices rather than zignee so I use zwavejs2mqtt on raspberry pi's in various locations around the house (soon to be replaced with tiny Atom machines).