It is OK on Unix because that replaced library still exists in memory and can continue to be used by the programs ... running in memory!
Each new invocation of the programs that try to use that library will of course pick up the new version. It's not magic. I don't get why people can't grasp this.
But that's exactly why there is a problem!
Library version numbers generally change when the API changes. If a new version of the library is source compatible with the old one, the version generally stays the same. However, that doesn't mean the internal workings are compatible.
Let's say you've got a library that handles communication between applications. You've got Foo running with library version 1.2.3. The developers discovered a bug in the library's internal data transfer protocol. The bug is an implementation detail, not an application visible one, so they simply fix it and release version 1.2.4. It's 100% API compatible - taking advantage of the fix just requires updating the library. You update the library in place, with Foo still running using version 1.2.3. You start up Bar, which now loads library version 1.2.4. When the two apps try to interact, you're now going to get bugs or even crashes when they interact. They believe they're using the same library, but they're not. You've now run into a class of bugs that only exists because you updated a library that was already in use.
The issue gets worse if on-disk data is involved. You've now got data files potentially being updated by different versions of a library, potentially leading to data corruption or loss.