How to program a microcontroller over another microcontroller?
Basically your task will be to program a bootloader onto the one at the very end. That bootloader will need to accept specific commands via UART which causes it to reboot (watchdog?) and then enter the bootloader section. From the bootloader, it will again accept data which will overwrite your application area. After the update is done, boot to your application section (until you receive the command to update again).

Are you planning for a redesign at this point?