Na verdade, acho que envolver ou isolar APIs de terceiros em uma camada "shim" é um bom design. Há uma série de vantagens em fazer isso.
Por exemplo, o que acontece se você alterar os sistemas operacionais supondo que você não está desenvolvendo em um ambiente gerenciado como o .NET (que basicamente fornece a camada shim para você)? Se você colocar uma camada de correção sobre todas as chamadas do sistema, como filas de mensagens, mutexs, etc, esse processo será muito menos doloroso. Eu usei o exemplo do sistema operacional, porque eu fiz isso, mas se aplica a qualquer tipo de biblioteca / módulo de código "swap-able". Como outro exemplo, suponha que você use uma biblioteca de gráficos e, em algum momento, decida alterar seu fornecedor. A camada de correção basicamente permite que o aplicativo principal seja executado em vários ambientes diferentes, possivelmente sem outras alterações além do que a camada de correção está realmente fazendo. Isso é muito vantajoso quando você está desenvolvendo aplicativos de plataforma cruzada. Além disso, tudo o que precisa mudar está em um local conveniente.