I have started my journey through OS development. People usually shout that using raw binary instead of ELF (or other structured format) is a common mistake for applications in a custom OS. I can second that because of additional benefits ELF provide (places to store metainformation such as the symbol table, .debug and .line ). However, let's think about the kernel binary itself for a minute. Should it be structured (like ELF) and if yes, why? Otherwise writing an ELF loader and squeezing it immediately after stage1 loader seems like a waste.
AFAIK Linux kernel is an ELF file but I don't know the reason why.