How do I add a module? Looking for a thorough, systematic and in-depth explanation. Long post

That’s a bit misleading really. It’s true they’ve begun to use the latter approach more, but the bulk of the engine is still reliant on exporting symbols. The interface approach is definitely better where feasible (since you can then use a dynamic dependency making your modules less tightly coupled), but it’s far more restrictive. It should be used whenever you have some self contained piece of functionality, service or whatever, that naturally can be exposed through one or more interfaces.

In the engine, you can look at the asset registry and asset tools modules as examples. One of my plugins does it here, though it might be a bit convoluted since it was tacked on afterwards.

Also be aware that UE4’s reflection system doesn’t always play nice with this approach. If you have public reflected types, you may find cases where you need a full dependency, when with regular types a dynamic dependency would have worked.