Alos, you can set 'ambushes'. Dagovax goes a bit into that, but you can expand on that. Set a pike or phalanx unit, or spears to block a road the enemy MUST take. You can figure that out from where he will knock a hole in the wall. He will proceed directly by the shortest route from there to the city center.
Block his advance, and have excess units waiting to pounce from the flank or rear. Cavalry is good for this as it is fast and hits hard.
Missile units, once away from the wall, use fire arrows (in groups) against high-value targets (elephants, Bull warriors, Poeni infantry, phalangites, Chosen Axemen, Generals). Fire will help to panic them, the charging cavalkry the rest.
If you can't create roadblocks and armored fists to strike from side or rear, then fort up in the city center. Your troops cannot break when in the city center- it is hardcoded to prevent routing. Any routing unit will run for the city center where it will reform.
Sallies can be worth it to wear down a foe. I sometimes sally even if outnumbered four to one. I exit, they move to a corner, I empty my quivers into them, then return to city. If they give chase, they have to storm my walls first, losing more men to the arrows of the towers. The timer runs down, then I get to do it again.
Pooches are great for this. Like a fire-and.forget missile of teeth. Sally, cut them loose, retreat. Next round, you have more dogs.