Вы, вероятно, могли бы скомпилировать xaml во время выполнения, но не лучше ли просто создать скомпилированные пользовательские элементы управления, получить для них ctor с помощью отражения и вызвать его + добавить их в качестве дочерних, когда это необходимо?
Вы можете поместить их в отдельные сборки (скажем, в другой каталог или использовать какое-либо соглашение об именах) и каждый раз опрашивать (скажем, по щелчку мыши на каждом узле древовидного представления или использовать некоторую политику кэширования), чтобы выяснить, есть ли какие-либо новые сборки.