I think that's a very good question. It's analogous to
record-oriented I/O vs. byte stream I/O. It's easy to build
record-oriented I/O on top of a byte stream, but it's a real bear to
do it the other way around. Similarly, it's easy to build synchronous
I/O on top of asynchronous I/O but the reverse ends up looking contrived.
Which was exactly the point I tried to make in the POSIX.4 discussions, but it does take more work in the basic housekeeping and you need a way to handle events and completions that are priority based, queued, and a few other details. As Doug said, they stayed away from some features (like messaging). async I/O was one of them.
But as I said, Ken, Dennis and the rest of the crew did an amazing job with very little.