A mechanical reason there needs to be a time-limit: the war can’t resolve until all the battles are done.
Once I hopped in with my last flag with 20 seconds left in the war. It was a long, grueling fight; the timer was ticking down and I finally nailed the last remaining defender.
Everyone in my alliance was biting their fingernails. The outcome of the war depended on that battle, and the result couldn’t be posted until I was done. If there were, literally, no time limit to a war battle, a fight could take hours, disrupting other’s lives. Similarly, even mid-war, taking forever with a battle blocks an ally’s ability to clean up your mess in a timely way, possibly delaying a mass reset that can let your alliance get on with the war.
It’s an interesting question, though, why SGG chose not to have the damage multiplier that keeps raids short.