Hola, yo hice algo parecido, pero creo que con mi solucion, al hacer modificaciones grosas si o si deberias volver a compilar. Yo necesitaba simplemente instanciar muchos objetos de ciertas clases y guardarlos en una Lista generica. Eso podria haberlo hecho todo en el codigo fuente, pero a medida que necesitaba mas objetos, debia ir y modificar eso y volver a compilar, lo que era muy molesto, entonces lo que hice fue escribir los constructores de los objetos en un .txt. Despues abro el txt y ejecutaba todos los constructores de las instancias, esto es lo que llaman "macrosustitucion" aunque no estoy completamente seguro de que sea correcta esa definicion. El inconveniente es que C# es un lenguaje compilado, y tengo entendido que en tiempo de ejecucion no hay forma de modificar el codigo fuente (aunque se me esta ocurriendo algo, no lo probe) por lo que cuando queria instanciar objetos pertenecientes a mi programa, no me era posible. Lo que hice fue crear un .dll con todas las clases de mi programa, entonces al intentar ejecutar el txt lo referia a esos dll (con mi codigo fuente) y wala. Esto lo hice con CodeDom y Reflection.
Aca tenes una extensa explicacion, tenia un ejemplo mas sencillo pero no lo encuentro, ahora no tengo mi codigo a mano, pero cuando lo tenga si me acuerdo lo paso.
http://msdn.microsoft.com/en-us/library/ms404245.aspx
No te puedo dar una solucion concreta por que es muy complicado lo que queres hacer, pero capas esto te da alguna idea.
Saludos!!