Yes, PsychoPy has used semantic versioning exactly as you describe for about a decade (see http://www.psychopy.org/changelog.html)
The more I think about it using
pip for PsychoJS as a separate module makes no sense at all. PsychoJS contains no python code so it would be crazy to include it as a Python module just so that PsychoPy had access.
Git submodules look like the ideal solution and they’re new to me. I’ll look into how they work. Can’t work out when they appeared in git but definitely not when I first started! Github apparently made a blog post about them just 3 weeks ago, so I guess I’m not the only one new to this! https://github.com/blog/2104-working-with-submodules
So thanks for the heads-up on that