The best way I have found to level up a hero is to attack lvl 10 territories (non-town)
With marksmanship 7 (or maybe its 8 ), I can send 10k archers and 1 militia unit to attack a lvl 10 territory with no losses! I get 40-60k xp for my hero each attack.
If the territory is close to my attacking town, it only takes like 5 minutes round trip, and with 100k archers i can send 10 attacks at once! If I keep this up for an hour, I can get 10 heros around 500k xp each!
Having a hero with a higher attack than a defender (or vice versa) will help a LOT during battles. My troops usually take out 3 enemy troops for every 1 I lose. This has a lot to do with having a higher level hero than my enemy.