I'm not sure about the multiple program headers, but it seems that the linker script used in that tutorial is a little different from what's done in the regular x86 bare bones (Apart from the fact that it's a higher half kernel). For one thing, the multiboot header isn't explicitly placed anywhere in the linker script, it's just placed at the start of the start of bootstrap.asm text section, which could eventually get forced out of the area the multiboot bootloader checks when other text sections start getting linked into the kernel.
They also put the read only data section inside the text section of the output as well, instead of in its own section in the output? (I'm not actually sure there's a problem there, but it just differs from what I've seen, and it would make sense to put rodata in it's own section so that eventually the page could be marked read only when you eventually enable various protection schemes...) Either way, I'm sure the author did things they did for a reason, so if it doesn't work fully, it might be better to try and stick to something which you know and understand well, and use that as a basis for your higher half kernel.
I'm not really an expert on the subject, but I did use the higher half bare bones as a base for my own higher half kernel, if you'd like to take a look at that for a reference you can, but I'm not promising that it's a good example, and hopefully somebody more versed in the subject can provide a good reference and fully explain the design decisions in the higher half tutorial. I believe a little while ago one of the veterans on the forums had a better structured higher half tutorial, but I can't find it any more.
My own
linker script and
bootstrap for a higher half kernel, based heavily on the tutorial. I set up the bare minimum of paging needed to call into higher half C code in my bootstrap, which means that the bootstrap is really ugly and wastes lots of space, so feel free to come up with a better way to do that, I'm awful at assembler, and I'm sure that somebody could turn most of the bootstrap I wrote into macros and compiler options.
As for the multiple program headers, I have no idea, it might have something to do with compile settings, but that's all I have, hopefully you can get that working.