Den geteilten Code in einem eigenen Subrepo zu versionieren ist gut.
Aber weshalb Anwendung und ihre x DLLs alle einzeln versionieren wenn sie doch sowieso nur auf einem Stand zusammen funktionieren? Ich habe ein sehr ähnliches Projekt - Eine Hauptanwendung, zwei Handvoll Zusatz-DLLs, und diese teilen sich (allerdings nur sehr beschränkt) eine kleine Bibliothek. Ebendiese Bibliothek ist ein Subrepo, die Anwendung an sich mit ihren DLLs ein einzelnes Repo.
Das ist seit ungefähr vier Jahren so, alles bestens