I have no idea why someone would decide to do it that way, but they did so we're stuck with it.
As with so much of Vassal, it wasn't a decision that was made at a specific point in time by someone. Vassal has grown organically over years, with features being added with little idea of how creative users would end up using them. The different levels of Global Variables where added at different times without an over-arching design philosophy.
No, we are not stuck with it. What can we do? It is too late to impose some sort of hierarchical naming convention to access remote properties, but we can add more Beanshell functions to access them.
I will address your concerns about the GetProperty function in another thread, but I would propose we add the following:
getZoneProperty(propertyName, zoneName) - Get the value of Zone level property propertyName in zone zoneName on the current map
getZoneProperty(propertyName, zoneName, mapName) - Get the value of Zone level property propertyName in zone zoneName on the map mapName.
getMapProperty(propertyName, mapName) - Get the value of the Map level property propertyName from the map mapName.