Механизм есть. По такому приципу COM-объекты работают или DLL в виндовсе, или .so в линуксе. Основной бинарник линкуется статически с неким stub-library, которая имеет имплементацию каждой функции из загружаемой библиотеки со всеми такими же прототипами, и в этой прослойке она берёт адрес таблицы функций в основной библиотеке (когда она загружена), прибавляет к нему номер функции и вызывает по ссылке уже настоящую функцию. Ну а загружаемая библиотека должна таскать в себе таблицу функций и при загрузке как-то передавать её адрес основному коду. Как именно: вариантов масса, самое простое -- положить таблицу функций по нулевому смещению относительно адреса загрузки дополнительной библиотеки.