Если вы хотите выделить из кучи в одном модуле и освободить в другом, тогда вам просто нужно динамически связать среду выполнения. Более того, все стороны должны динамически связывать то же самое время выполнения. Как только вы это сделаете, проблем не будет.
Теперь, это довольно серьезное ограничение для ваших плагинов, и вы должны дважды подумать, прежде чем делать это. Принуждение всех авторов плагинов к обновлению в пошаговом режиме с вами является тяжелым навязыванием. Я бы порекомендовал вам рассмотреть возможность рефакторинга вашего интерфейса, чтобы выделения всегда были связаны с освобождением в одном модуле. Это снимает ограничения, которые я описал выше, и облегчает жизнь авторам ваших плагинов.
Что касается того, почему вы все еще страдаете от ошибок во время выполнения, сказать сложно. Я предполагаю, что не все модули ссылаются на одну и ту же версию среды выполнения.
В комментариях вы утверждаете, что управляете всеми плагинами. Это означает, что ограничения, которые я обсуждаю выше, не являются навязыванием, поскольку вам легко использовать одну и ту же версию компилятора для всех модулей. Однако правила динамического связывания с межмодульным доступом к куче остаются. Вы должны использовать динамическое связывание с одной и той же версией среды выполнения.