A normal microcontroller program is placed at the reset vector (usually address zero) and your code starts there. Programming is by ICSP (or I think you can program a PIC32 through JTAG). If you want to program it through USB, SPI, RS232 etc then you need to so something different. A bootloader is some extra code which you can write yourself, but there is ready made code for you, which resides at the reset vector and runs before your code. It detects a request to reprogram the micro and re-writes the flash with the new code (while being careful to not overwrite itself). If you want to program by USB, SPI, RS232 etc without a bootloader then you need something else to take the data from the USB... and program the PIC through the ICSP pins.
To allow you to write and test code for the development boards without using a bootloader, but still using something other than ICSP, Microchip include a second micro to do the programming. If you use bootloader code then you can do it without the extra micro/
Keith