Dynamic loading a library with Fl_dynload

I am trying to dynamically load a library (noted as A below) in my non-public application that uses dune as the build tool.

I have the following modules:
lib: links library A statically
register: registers the dynamically loaded module
main: dynamically loads lib, and calls the registered functions of A.
This works. However, in main, I wanted to ‘open module’ from the loaded library A, which I cannot do, because the module is a unbound in main.

I have another problem. To register the loaded module A, I need its interface in the register module. To create a side effect to register the module, I also need a dummy instance of the module A. For example: if I want to register int, I need to do ref 10, but I don’t have the 10, the implementation of the interface.

I don’t think this is a unique problem. How do people use the dynamically linked libraries?