1) I noticed that the version number could be different for blocks. How could we introduce a new version number by soft forking?
A soft fork isn't required to use a different version number. Some numbers cannot be used, but, for the most part, miners can set whatever block version number they want. This is what allows them to use the version number to signal soft fork readiness and also allows them (unfortunately) to use asicboost.
2) Why doesn't it use compact Int to save bytes?
Compact int isn't very compact. There is not much space to be saved there, and really no reason for the version to be a super expandable field.