Well, theoretically you could make a (pretty useless) Windows program that doesn't do any syscalls itself. It would mostly be limited to heating up the processor, but it would be a valid program. In fact, you could probably actually do some basic syscalls without linking to NTDLL by using very old DOS syscalls for things like printing to the console, perhaps with a compatibility mode.
Also, being pedantic, in Windows libc is a wrapper over Win32, which is partly itself a wrapper over NTDLL. For example, msvc's malloc() simply calls HeapAlloc() or some variant thereof.
Also, being pedantic, in Windows libc is a wrapper over Win32, which is partly itself a wrapper over NTDLL. For example, msvc's malloc() simply calls HeapAlloc() or some variant thereof.