Hi Christopher
Yes, you can load from UART into program memory. I haven't done this on Kinetis but the process is basically the same on any MCU. Receive bytes over UART, write to program memory.
I developed a fairly complex bootloader for AVR chips some time ago. In developing the bootloader, the key is to have a JTAG programmer where you can read back the device's flash memory. Then you can compare the contents of your .bin file byte-by-byte with internal flash memory, to confirm that program memory is ending up where you want it.
Here's an application note to get started:
https://www.nxp.com/docs/en/application-note/AN2295.pdf
Personally, I found that working from an existing bootloader code-base can be confusing becaues sometimes they're developed to support a wide variety of input channels for new program data, and a wide variety of architectures. I think it's reasonable to develop your bootloader from scratch just using a datasheet for your MCU; this way, you will end up with a very literal understanding of what's going on.
There's a lot of additional detail (you may want to use a CRC to validate program memory; you will probably need to become familiar with details of the memory-map in your MCU; etc etc), so feel free to post here again if you run into a specific issue.