The reason the groups are directory-specific is so that separate projects support compositionality. In other words, you (or someone) should be able to take your project, and combine it with another separate project, and still have them both compile correctly. If groups were global, both your project and another project may have the same-named group <submodgroup>, which would then break both builds when you build them together. Suddenly your project would be including object files it did not intend to, and vice versa. By making them specific to the directory, it anchors them into the tree so that they are still unique globally.
If you prefer to have "global" groups, you can just anchor them to the root of your project. Something like this:
MYPROJ_ROOT = $(TUP_CWD)
Then each Tupfile in your project can reference groups as $(MYPROJ_ROOT)/<groupname>, and you have effectively made groups global for your project, but can still be combined with another project without worrying about conflicting names.