The Linux Kernel is basically the spine of your operating environment. It provides support for all your hardware and performs essential low level functions.
As mentioned before, operating systems such as Windows and Mac OS X come with a kernel that has already been compiled for you, which includes support for a wide range of hardware already. These kernels usually have very nice features compiled in as well, such as "Plug and Play", or hardware autodetection, built in. In these cases, you don't have to be concerned with the kernel and don't even have to know that it exists.
The Linux kernel, though, is open-source, meaning it can be customized to meet your own requirements. Why compile support for such a wide range of hardware when all you really need is support for the hardware in your machine? Why compile support for hundreds of network cards when really you only need support for yours? That's what compiling a custom kernel and recompiling the kernel is for.