I wanted something like this in the embedded space (m0/m4). One challenge I encountered was the amount of additional memory and scratch - what does that look like with this?
There are two kind of patches; normal and in-place. The normal patch requires the old firmware to be readable until the patching procedure is completed. The in-place patch is designed to write the new firmware to the same memory area as the old is read from.
You can read more about in-place patches here: https://detools.readthedocs.io/en/latest/#id2