Ugh, had to read a two-year old thread from scratch for a single new message that should have been in a new thread.
That said, is guess the solution wouldn’t be sub-modules, but a “cluster” access level that’s between “fileprivate” and “internal.” But each file in the module would have to declare which cluster it belongs to. (Plus a default void-cluster when no cluster name is given.)