AFAIK, these are different approaches. In ELF symbol versioning, the
developer assigns a version number, guaranteeing that versions are
only changed if a binary incompatibility is introduced.
In Linux module versioning, 'version' numbers are automatically
generated from the signature of the symbol. Simple C++ style mangling
is not sufficient, because you also want to encode the structure
layout of the structures the function processes.
I believe a manual process would introduce inacceptable overhead, as
those functions and data structures change more frequent than they do
in, say, glibc (which follows standardized interfaces).
Regards,
Martin