On the one hand, hidden troops create a lot of annoyances and are pretty unrealistic. On the other hand, we need them to keep players in the same game with other players/alliances a thousand or a million times their might.
At the moment, global chat is largely preoccupied by players and alliances trying to taunt each other into coming out of hiding. I suggest that we go one step farther and create a new ranked stat: prestige.
You get prestige by defeating a city with inferior forces (probably because the city's troops are hiding). Your gain in prestige equals the total might of the city - wall, reinforcements, hidden and unhidden troops - minus the might of your attacking force. If no defending troops fight at all, then your prestige gain is doubled. If the attacker gains prestige, the defender loses the same amount of prestige. So prestige could go negative.
If the city successfully defends, there is no prestige gain or loss.
Since the maximum prestige gain is limited by the total might in the city, it follows that little prestige can be gained from low-might players. The most prestige can be gotten by "counting coup" on a high-might troop-hiding player, using a minimal attacking force. The threat of possible prestige loss would create an incentive for high-might players in particular to unhide.