RAM only costs a few dollars per megabyte, and the cost of disk can now be measured in cents per megabyte. Imagine you have ten different applications, each making use of a common library totalling a megabyte in size. The cost of not using a shared library, which means each application has to have its own copy of the code, means you end up taking ten megabytes of RAM and disk space instead of one. The extra cost is still cheap compared to the cost of the support headaches caused by shared libraries. Inter-process communication does not require shared libraries at all, only a shared protocol.
Subsequent clients see that the shared structure already exists, so they link to it.
All the necessary interlocking of access would be done as defined by the protocol, using whatever synchronization primitives are provided by the operating system and CPU hardware. As you can see, there is no need for different communicating clients to share any code at all, only data. And any issues of version conflicts at the protocol level are precisely the same whether you use shared libraries or not, as are the solutions to those issues. As a rule, third-party vendors should not be shipping these libraries with their products. In other words, the more monolithic the operating system appears to third-party programmers and users, the more reliably it can be expected to work.