IMHO, most of the device tree use I have seen is to define addresses of subcompoments, and I still think that is a job for the linker - having a special extra file as linker command to contain all those addresses simplify the process.
It should be possible to have late relocation for very few fields in the bootloader (at least kernel relocations is possible on ia32/amd64) if you really want a single kernel for different "fat" microcontrollers.