2) Cross-compiling is good for the initial programs with no or few dependencies, like kernel, eglibc (glibc) library and probably the GCC toolchain to get a minimal system running. Later it is less and less realible and at the same time more complicated.
1) and 2) practically the same, you can say both are native environment for 99% of programs. For hardware related drivers, modules, etc. for testing you need the real hardware, but compiling in QEMU is more convenient and also can be faster depending on your machine.
Currently I'm building packages in QEMU running piCore. My first packages were built in QEMU running Raspbian.
Raspbian packages are also built native on DEBIAN running on a fast ARM board with many memory, not on Raspberry Pi.