You’re right, there is no way to stop or reset a running timer. Using multiple flows is sometimes a solution, not a problem.
In your case the easiest way to make sure you are told the garage door is closed as soon as it is closed, is to use your original 3 flow method. The first flow tells you it’s open and starts the second flow. The second flow waits an hour and can tell you if it’s still open, and the 3rd flow will tell you it’s closed as soon as you close it.
Now, there is a way, using a shorter timer and a variable to count loops, that you could use that second flow to tell you the door is still open after an hour, but give you a quicker notice when the door is shut.
You wouldn’t want to use a 1 minute timer and have it loop 60 times before it notifies you - that could run into Stringify’s usage limits.
But a 2 two minute timer with a variable counting down to 30 from 0, or a 3 minute timer counting down from 20, would probably be OK.
But that is more complex than just using 3 flows, and you would still have to wait a couple minutes before you were notified that the door was closed.
So for the garage door situation I would suggest using the 3 flow method.