DLLs where designed for the era when disk space and memory where very limited. The idea was you only ever needed one foo.dll on a system and would ever only load one foo.dll into memory. If another application called foo.dll, Windows just passed a reference to the already loaded copy.

At the time it was a sensible solution, though poorly implemented. Microsoft made two key mistakes from the start, failing to clearly separate system and application DLLs, and not providing a good way of uniquely naming or providing version numbers for DLLs.

What makes it so typical of Microsoft is that they where copying something from Unix, and managed to mess it up. Shared Libraries under Unix are not what I would call elegant. But the system does work and covers all of the major issues.