Each component can have its own version (that's how packages are today).
Then we introduce a concept called "release bundles" or something like that, which can also have their own independent version numbers.
So we'd create an acs-core release bundle, with version 4.7, say, which contains these components of these versions. Another bundle is the dotlrn release bundle, which could include all the acs-core components, too, if it wants to.
How does that sound?