Hard faults are evil. Any number of things can cause this from a div by zero to accessing something out of bounds or freeing an already freed pointer.
A few options.
You could throw in a few serial.print statements and log the activity as best as possible. That would require a logging device. You would see activity leading up to the crash.
There is live debugging that should point to the instant of the panic. Again, this would have to be attached to equipment at the time of the panic.
You might be able to use your idea to store a bit of stack trace in EEPROM that will survive a reset. On your next panic or reboot, you can check this region and send a message as you described. There isn't a lot of room here.
That are my initial thoughts if I were to pursue a bug hunt.