How about some middle ground... making syscall() less fiddly and more architecture-portable somehow (export a map of name -> syscall numbers into /sys/kernel somewhere, for instance) so that it was an actual option might be enough.
Pulling all of libc into the kernel strikes me as... bad. Compare the size of glibc to uclibc or eglibc ... the mere existence of all of them means to me that options are desirable.
So... maybe a kernel module? To try out the idea, at least. Ship it with a stub userland libc to link against, or patch an existing libc to detect it and use it if found.
We had an http server kernel module for some years (is that still maintained, even out of tree?), why not a libc one?