Есть такая вещь как как EXPORT DRIVER, но он работает как экспоритуремая DLL юзер моды через LIB, и соответсвенно черет таблицу экспорта, что сразу же накладывает ограничение на перезагруку новой версии. В ядре есть функция аля GetProcAddr, но только она для хала и ядра сделана. Думаю тут можно сделать следующимим методами
1 — как обычный драйвер, вызовы делать через IRP & IoCallDriver
2 — как обычный драйвер, через IRP получить адрес функции и потом уже делать вызовы напрямую
3 — как обычный драйвер, в котором сделать экспортируемую функцию, но без явной привязки, т.е. ее адрес получать динамически, с помощью разбора таблицы экспорта (функцию нахождения экспорта могу выложить если нужно)
Все это дает возможность выгружать дарйвер во время работы основного, и загружать новый.