O que um sistema "precisa" para inicializar é o código executável em um endereço de memória específico.
Se você colocar o kernel no local certo, ele será inicializado (e foi assim que fizemos nos velhos tempos - sem carregadores de inicialização). Nos dias de hoje nós colocamos um carregador de boot lá. Um gerenciador de partida é apenas um código executável que é um pouco mais inteligente que o hardware (mas não muito) sobre onde encontrar outro código executável.
Para explicá-lo em termos muito simples, ao ligar o hardware começará a execução de um programa no firmware. Isso varia de acordo com o hardware, mas no PC costumava ser o BIOS. Hoje pode ser EFI. Esse programa, o que quer que seja, sabe como procurar no (s) dispositivo (s) de bloco em endereços específicos. Os blocos encontrados lá são carregados na RAM e então executados. O hardware é muito pouco inteligente sobre o que isso pode ser, então realmente não há qualquer exigência de que seja uma coisa específica, exceto que é o código de máquina adequado para o processador *.
No seu caso, a única coisa necessária para inicializar é uImage (a imagem do Kernel). O U-Boot é simplesmente uma maneira de encontrar o uImage. MLO é, presumivelmente, apenas uma maneira de encontrar o U-Boot. Em teoria, se você colocasse uImage nos blocos certos, ele seria inicializado diretamente.
* Aliás, bricking é quando o que acontece nesses blocos não é apropriadamente executável pelo processador.