C wasn't meant to fully replace low-level languages like Assembly. Context switching still isn't possible in C (nor in Zig).
And most C library calls are actually Unix system calls. Malloc() is an operating system call and not a library call. Yes, they made it a library call later on to facilitate usage in other operating systems but it was originally an integral part of the Unix OS.