The confusion comes because we mix here two things: include and sub modules. Think of it as one big source file where the submodules are defined like in the manual example.
Submodules are necessary if you want to have different namespaces inside your main module and where you want to control explicitly what is visible in each namespace. Normally you don’t use them because one module namespace is sufficient for most libraries.
Therefore I recommend to use the approach outlined in the other thread linked to in my first response: have one module where you include your source files. It makes a programmer’s life much easier.
Just chiming in here with a guess, but perhaps the OP is referring to the common practice when using Julia packages to inject all kinds of symbols into the current namespace. The more-or-less equivalent form in Python would be from M import *, which is used far less often as the import M form, precisely because the former pollutes the namespace of the importing scope with (part of the) contents of M. The second form only introduces M in the current scope and the Python user then picks the symbols he/she wants with M.func or similar. There’s also from M import func (or even from M import func as m_func to rename on importing), to further control what gets imported and to avoid clashes with existing symbols. But in Julia adding methods to existing functions is kind of fundamental (plus having using pollute the importing scope by default) and was something I really needed to get used to as a long-time Python user myself.