Модуль не выгружается не из-за объектов. А из-за того, что ты где-то его импортировал. Тут жесткое правило, что модули выгружаются только если нет других модулей, где он импортирован. Так что тебе нельзя этот модуль использовать в секции импорта нигде, только так.

Это на самом деле не очень сложно, вот тут есть пара примеров
http://gitlab.molpit.org/bindings/sdl2

Модуль Sdl2StdWin во время "ручного" импорта в примерах Obx* устанавливает себя как реализацию абстрактного интерфейса.

## Код:
```
(* Load realisations for current platform *)
      IF Dialog.IsWindows() THEN
         ASSERT(Kernel.ThisMod('Sdl2StdWin') # NIL, 20)
      ELSIF Dialog.IsLinux() THEN
         ASSERT(Kernel.ThisMod('Sdl2StdLin') # NIL, 20)
      ELSE HALT(20) END;
```
