Hey assembly is good in the sense you are only dealing with one language but in embedded C you get bad parts of both C and assembly. You have to follow weird C99 or even C89 syntax and on top of that for each micro controllers you have to sift through several hundred pages of data sheet. Each one needing separate registers to be setup in a particular way for every single operation and so much more stupid ass shit.
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