Kill the motion causing stuff with hard wired stuff - relays are usually used with multiple E-Stop stations, leave the power to the Arduino up and also then have it reset the program for a controlled start
Software goes bad from time to time and processors can hang up - industrial PLC's also have a watchdog timer built in so if the program does not come around to the start after a certain amount of time (typically a few milliseconds and in the AB stuff it can be adjusted if your program has a slow scan time )
Sorry but doing E-Stops in software is not safe and the systems I worked on was not allowed by code