Generally all sub packages must have the same version as the root
package (the git tag approach can't work otherwise), so if they need to
have different versions, they should be separate packages instead.

For local packages there are some bugs present w.r.t. version inference
(including erroneously treating everything as ~master). This has only
been discovered recently and will be resolved in 0.9.22.

Regarding the "version" field, it hasn't been documented, because all
implications of using it manually haven't been properly investigated,
yet. It shouldn't be used for public packages for now, but for local
ones that don't live in a git repository it's still a viable workaround.
Local packages that do live in a git repository are still better off
with a git tag, but this of course requires fixing the "~master" bug first.

BTW 0.9.22 is planned to be done quite soon, in about 2 weeks (or at
least a first pre-release).