* Using a wrapper lets you use the same API on different platforms. This is not just for programs that are expected to compile and run on multiple platforms (although that is the main reason); it's also for developers who are expected to write programs for multiple platforms.
* This potentially allows for a cleaner API, because the native OS one has to be careful about backwards compatibility, whereas wrapper APIs can be more carefree about it, at least initially. In the most extreme case, you can use a totally new library with a freshly-designed API. At this point ASIO has stabilised, but you can see it's substantially different from WinSock (albeit it has the same fundamental concepts, of course).
* The underlying OS API generally has to be purely C-based, whereas a wrapper can make use of langauge features, such as C++ features in the case of ASIO. It is sometimes debatable whether it's a benefit to make use of C++ language features! But at least some people would consider it to be.
Disadvantages:
* As discussed above, job security!