From the same Nerves project I had founnd this:
https://github.com/fhunleth/fwup
It is a firmware updater. It seems one mode is the basic create whole disk image and replace. The other is can handle update "tasks".
Now in general Erlang was built to handle hot-code updates. Basically replace the code while the code is running (have use immutable data structures and have specials facilities built it).
But that can be tricker to set up and if you have C code or hardware control, it might not work as well. So upload firmware then reboot might work (I am just guessing here since I don't know any details or goals).