Does Arduino need the bootloader if programmed with programmer?
To answer the first question, the bootloader is needed because your program is built in such a way that it depends on the bootloader residing at the reset address of the processor, and then having the bootloader jump to your program. It's a function of how the linker script and the run-time code is set up for the Arduino environment.

I don't know the precise answer to your second question, but it certainly should be possible.

An alternative solution would be to use a different linker script so that your program actually resides at the reset address.