I don't see that the compilation step is adding any value.
Reading just quickly about .mo files, it is clear that:

It is a machine-readable representation
It is a hash table

Given gettext's function, to lookup strings by keys at runtime, it is reasonable for this lookup to be implemented efficiently.
Also, it is needed for gettext's performance impact to be negligible; else interest to play nice with the international community would be even lower for english-speaking hackers (from all countries, we all speak english, programming languages are in english).
Making the .mo file an already processed representation is good since

The format is well suited for quick lookup (hash table)
The format needs little processing at application launch (custom-representation binary)
Why does the Python gettext module require a compilation step (.po -> .mo)?