You can prepend or append additional JavaScript code to the generated module by specifying a file via the --pre-js or --post-js options on emcc (or by just taking the output JS and manually appending to it). This should make it fairly straightforward to set up initialization, such as by setting module options in a --pre-js, or creating a wrapper function that does the async setup for you.
Another thing that may help: if asynchronous setup of the module doesn't fit well with your code model, you can disable the memory file with "--memory-init-file 0" so all the code loading and initializers run immediately. This will however increase the total size of your code, as the data segments will be included as an array in the JS instead of a separate data file.