Obviously you can implement anything with a sufficient amount of effort - but it is still a bad API full of kludges. The only thing really going for POSIX is that it is real and ultimately is an useful standard (in the sense that you can use it to get work done).
Anytime I browse through Stevens'es seminal books I want to cry - the books are great but what they are describing is a mess.
If you take the core Win32 API for comparison - only the IO operations and thread management - it is really clean and orthogonal, quite unlike POSIX. (Note that I am not necessarily saying that Win32's philosophy is better; only that the API is much cleaner).
One example of the POSIX mess that comes to mind is fork()/wait()/SIGCHLD/zombie processes/etc. Compare that to Win32's simple and straight-forward approach of WaitForMultipleObjects()/GetExitCodeProcess()/CloseHandle().
In an ideal world I would have liked most of the POSIX semantics with Win32's cleanness and orthogonality. (Well, WaitForMultipleObjects() woudln't hurt either)