We solved a similar problem using subversion.
Each app and each Common Lib have their own repositories.
Every app has a directory Libs that contain the dependent dlls.
so the app only gets an update of Common Lib if a new set of dlls is provided.
however upgrading the lib folder is not trivial because depending sub-dlls must match the correct version.