I'm sure this has been discussed elsewhere, so please forgive me. But the forums are a little crazy right now, and I wanted to discuss something productive.
I used to be dismayed when I saw the AI with some high hitpoint uber-unit that did like 5 million damage a shot. Until I realized that unit is only dangerous if it actually gets to *hit* you. The combat system gives the clear advantage to the attacker, and its movements are very predictable. Building a squad of veteran heavily armored units with powerful hammers is very expensive and time intensive. Building a squad with nothing but the most powerful weapon you have is considerably shorter, cheaper, and gives you a one hit wonder, but thats all you'll need to kill those units.
If you one-hit on first strike, you suffer no retaliation. From that point, the enemy movement is so predictable, you can easily out maneuver them, or kill them one at a time letting them move their two spaces up to you, hit, and fade. Or you can then move your expensive armored units into position for the weaker units to flail away at. An enemy squad of archers can be problematic, but a magic using hero can counter them, and even if they then kill your glass cannons after the glass cannons have taken out the dangerous unit, it doesn't bother you as much, because you can build them for much cheaper.
On the one hand, you could argue there is a good reason to have a mix of high damage or high defense troops, but you can't really build troops that have a high enough defense that will keep the unit from losing members vs the high attack scores of some of the monsters, while on the other hand, it is much easier to pump up offense to be able to one shot them.
There are lots of complex ways you can rework the combat system to account for this, and to enforce the value of armor and survivability, and diminish the advantage of the attacker, but there are some simple things, too:
1) Mix up enemy combat speeds. Enemy movement is far too predictable. For the most part, most of them move two squares, and it is easy to move into position where they can't attack you that turn, but you can kill many of them the next turn without risk of counter attack, or kill one at a time, and move to repeat the process. Mixing up enemy groups with move speeds of 3 and 1 will make it far more difficult to anticipate and effectively counter their movements to where you're killing multiple units every turn without retaliation.
2) Make "tough" enemies that are supposed to be "hard to kill" , hard to kill by virtue of more hit points and less defense. More units will be able to hit them, but fewer will be able to one shot them without suffering a counterattack. The defense scores can get pretty annoying anyways, with your entire army completely unable to hit a creature for damage. Having your entire army have to focus fire for multiple turns to bring something down, but still able to actually *hit* the thing, seems just as epic to me, and less frustrating.
3) Units act in order of highest combat speed, tie goes to the attacking side. Make the -speed drawback to those powerful blunt weapons really hurt. With every unit having a default combat speed of 2 now, the intended drawback to those weapons isnt really functioning. You can still move and hit, or hit multiple targets fairly easily. Glass cannons with heavy hammers are in much more danger if enemy archers act before them.
4) Special, unpredictable enemy movement movement abilities, like teleport and leap. I know you are already working on abilities like this.
5) An "initiative" system. Slightly more complex, yes, but you can serve multiple purposes with this. Both armies have to roll an initiative check to see who acts first. The initiative check is modified by the highest level hero's "leadership score", which also affects morale. (armies should really require a hero unit to lead them around the map, but that is another thread). The leadership score is influenced by...Charisma...giving more value to that stat. This isn't an "easy" balancing fix, but something like it would keep people from being able to abuse the attacker advantage so much. Archer squads and enemy spell casters become much more dangerous if they can act first.
Anyways, I'm sure these and many better ideas have been discussed previously, so please accept my apologies.