Как вариант, для дополнений небольшого размера, при запуске проверяются доступные пользователю дополнения, сборки загружаются по защищенному соединению в оперативную память, и из нее подгружаются в приложение. Хранение на диске в этом случае не используется, а выдернуть сборку из памяти уже немного сложнее.
В коде, грузим дополнение в байт массив, и загружаем через Assembly.Load(binary_asm)
P.S. автоматом решается проблема с обновлениями