Так эта, Вы статически линкуете Init, который импортирует Initsys, который импортирует HostMenus, который импортирует...

И зачем Вы линкуете Dialog? Его главные функции (в том числе Dialog.Call) реализуются хуками в других модулях и без этих модулей работать не будут (для Dialog.Call требуется StdInterpreter, например).

В стандартном всё ББ работает через StdLoader:
1. В самом StdLoader реализуется хук для Kernel.ThisMod со товарищи.
2. В секции StdLoader.BEGIN сначала устанавливается этот хук (StdLoader.Init), а затем через Kernel (с помощью свежеустановленного хука)динамическизагружается модуль Init.
3. Модуль Init в списке импорта имеет HostMenus, который импортирует кучу модулей, в том числе и StdInterpreter, реализующий хук для Dialog.Call.
4. Вся эта куча модулей грузится загрузчиком до модуля Init, исполняются все их секции BEGIN, в которых устанавливаются нужные хуки.
5. А только потом выполняется Init.BEGIN. И поскольку всё что нужно уже проинициализировано - всё работает.

Вы же, вписав линковщику Init, должны взять на себя труд загрузчика и перечислить все используемые модули в списке линковщика в правильном порядке.

Если короче:
DevLinker.LinkDll libBB.dll := Kernel$+ Files HostFiles StdLoader# ~разве не работает?

И потом, у Вас таким макаром получаетсядва Kernelа - один в dllке и один - в exeшнике. Загрузчик должен быть вообще тупым, с использованием только WinApi

P.S. Документация говорит, что есть DevLinker.LinkDynDll, которая вообще-то непонятно зачем нужна, но для полноты включили. Создаёт dllку, содержащую динамический загрузчик. Попробуйте