Was du dann machen könntest ist folgendes:
Einen Ordner anlegen, in den du Assemblies packen kannst. Dann lädst du die DLLs innerhalb dieses Ordners in deine Application Domain und lässt dir über Reflection ne Liste der Typen innerhalb dieser Assembly zurückgeben, die sich von UserControl ableiten. Diese Instanzierst du dann über den Activator.
Dann müsstest du die UserControls mit CodeBehind halt jeweils in eine DLL kompilieren.
Das CodeBehind nachladen könnte mit C# 4 kommen (aber reine spekulation), weil MS da "Compiler as a service" angekündigt hat.