For critical routers, those that must never go down more than a couple minutes, even if you do a mistake, or those located on very high towers / roof use a router with a serial port available on it. Then wire a cable to this serial port so that you don't have to go on the roof, and use that for correcting your errors. You can use a serial port server, connected by Ethernet to another network. You can as well connect a GSM modem on the serial port, and use that remotely. You'll need to pay for a M2M GSM subscription, but for critical routers this is sometimes not a problem.
A good and simpler solution is to use safe mode, so that if you accendentally disable an interface or something like this, it will magically come back if the Winbox connexion is lost. This is enough in most cases. Always use safe mode when working on remote routers, and always make a configuration backup before to begin your work, so that you can restore on another router if something goes very wrong. This will save a lot of time on location where you will just need to replace the router with another one already configured in case of problem.
Another tip is to try to always have at least two interfaces available for configuration, so that if something goes wrong with the first one, you can enter with the second one. Acessing the router through a Local Loopback router address is better, because if the interface you are connected through goes down, dynamic routing (if you have that on your network) will magically reconnected you in a couple seconds through another interface, and you should not even see a Winbox session drop.
There are some rare situations, like when playing with Metarouters, where the router can fully crash with 100% CPU load. In this case it is possible to loose access even after reboot. The only way to get back connectivity is sometimes a hardware reset in those rare cases. Even the watchdog could do nothing for you in those situations. I experienced that a couple days ago, with version 5.18, trying to reduce the memory allocated to a metarouter instance on a RB750... Obviously this was a terrible idea :=) and i ended in removing the right rear RB750 pad to access the hard reset jumper... I should have read the manual saying that a Metarouter instance needs 16 MBytes minimum :=)