Is there a way to self hardreset /restart microcontroller?
What you describe is a watchdog circuit.

It is a circuit that, when enabled, resets your µC after a given time, unless its timer is reset (through code or by sending it a pulse). 

Its intended use is to restart frozen microcontrollers after a failure. A correctly working code should reset the watch at regular intervals, but in case of a failure (data corruption, bug, infinite loop, etc.) the watchdog no longer gets resetted, and triggers the reset of the microcontroller.

There even often is a flag that is set if the watchdog triggers a reset, so that the restarting microcontroller knows that it happened, and can run additional self-test, throw/log an alert, etc. 

Many microcontrollers have a watchdog feature, but if yours does not, there are dedicated watchdog IC, or you can even build yours, and a 555 is a mean to do just that. Google "555 timer watchdog" for more details.