All of the quirks you said are true, yet they still established the “okay” ecosystem of hobby-grade microcontrollers like Arduino, IoT devices, and other small scale robotics systems. None of them would have happened without the “okay” abstraction C/C++ provides as opposed to assembler
Because they are for different use cases. I use QEMU+KVM on desktop for games and 3D CAD software, because of its undeniable performance advantage. But on work laptop, I use VirtualBox to test my software on different platforms. On VirtualBox it’s relatively easy to initialize a VM, configure network, file sharing and device passthrough, and its snapshot feature allows me recreate the same environment for troubleshooting