Remember the whole nature of the new OS rewrite was to keep away from the metal so the rationale for writing in C or assembler and directly hitting the hardware is no longer there.
I'm afraid you got that quite wrong. There was never any need to hit the bare metal. People were just not used to program a multitasking environment and therefore made quite illegal assumptions about how the computer allocated its resources.
While he did get that quite wrong, so was your explanation :-)
Assembly for example hits the hardware directly. The programmer tells the computer what memory/chip addresses he wants to reference, and the computer will access those exact addresses. If they don't exist, the program will fail in one way or another. Assembler is what's known as a "low level" programming language. You pedantically and exactly program the computer. You also need to use an implementation of Assembly that matches your CPU.
C is a higher level programming language than Assembly. So for example you can use a compiler called 'gcc', which is written for particular operating systems and certain architectures like x86 (rather than a particular x86 CPU). If you program in C, most of the legwork in specifying memory ranges for your program is done for you (though I don't know much about C, I think you can do things like specify particular memory ranges if you needed to).
Getting back to the point. There's a reason why programmers "hit the hardware" directly. Program performance is a damn sight better, and while Assembly programming is extremely pedantic, it is more flexible. But you couldn't write a program to run on a modern operating system in Assembly, because the OS handles memory, cache, and hardware resources, it would tell your nasty little program that tries to circumvent it to get stuffed.
If say AmigaOS were completely written in C and then used on stock Amigas, it would be slower. Most of the performance and responsiveness is derived from hitting the hardware directly. OS4 is virtually a complete re-write from previous versions partly because of the architecture change, but mainly due to how the previous versions were programmed.
Someone can probably do a better job of explaining than I can :-)