Good luck when your program is dynamically linked to a library built with a different version of STL.
Object layouts will be likely different and the main program will probably crash.
The breakage from mixing different library versions (say, MSVCRT versions, for example) is a direct result of violating the ODR.
Make sure that your compiler provides a stable std library ABI.
Is this done a lot in practice? I had the impression that a lot of projects stick to C APIs in dynamic libraries.
In practice the reason that many projects provide a C ABI is that they want to interoperate with other languages and the C ABI, being extremely minimalist, is the least common denominator.