How about some improvments to sieges assaults/defending? It already consists storming walls, taking streets and conquering keep which is theoretically good system. But assaults fail too easily on streets or in keep because attackers might have less troops than defenders even if it should be other way around.
So maybe they could all work like storming wall, with reinforcements.
Example how I thought it could be best:
1) Attackers lay siege and starts making some siege equipments. Takes some hours. ->2
2) Siege equipments are ready, attack launches against the first ring of wall. ->3
3a) Attackers prevail. ->4
3b) Defenders manage to hold the walls. ->1
4) Attackers need to regroup troops and prepare for next battle which will be at the second wall. Takes some hours. ->5 If there is no second wall ->7
5) Attack against second wall launches. ->6
6a) Attackers take the second wall ->7
6b) Defenders win. ->4
7) Attackers need to regroup for battle in streets. takes some hours. ->8
8 ) Attackers have regrouped, battle in streets starts. ->9
9a) Attackers win the streets. ->10
9b) Defenders win in streets. ->7
10) Attackers need to regroup for final battle in keep. Takes some hours. ->11
11) Attackers are ready, final battle starts. ->12
12a) Attackers win, fortress is theirs.
12b) Defenders win. ->10
Defenders can of course try to sally out at anytime and if they win attackers need to start from point 1 again.
Point in this is that taking castle will take days and not just one for the player. There is also many battles and not one big which might take an hour in real life. Some time between battles ensures that player will fight atleast medicore health in each. Bigger places will have more battles while smallers need less, upgrading players castle is more worthwhile.