But at some point, isn't the hand-picked approach going to result in the same morass of version dependencies on any site of moderate complexity?
Which also means you'll choose libraries that are decoupled by design because the others are really hard to write such wrappers for.
For example, so that you can say "chargeCard(payment)" in your domain and app, Instead of having to do things like "openAnonCustomer(payment.customerId) && pmt= addPayment(payment.amount, payment.currency) && bookPayment(pmt)" or whatever weird language, order, or transaction boundaries a library uses.
Even if you do find yourself needing to update your dependencies, you can do them 1 at a time. This way you aren't stuck with a not building, completely broken codebase for days while you refactor to adapt to new changes.