basically, you recompile a kernel because you want to add/remove support for certain things from your kernel, like specific hardware, network protocols, file systems, etc. your kernel can support these things by either
1. you compile support into the kernel (called "monolithic")
2. you compile it seperately as a module.
compiling into the kernel is nice because it can make things somewhat more simple, with modules you have to add them to /etc/modules so they're loaded at boot. however, modules are much more flexible, and you can build a kernel with tons of options via modules and only load the ones you currently need and that way your kernel isnt huge.
when you install a distro, usually its a very generic kernel that will work on many different types of hardware, so it can be a bit bigger. by compiling your own, you specify only the things you need, and thus you will have less kernel bloat.
also by compiling it on your machine it is specifically optimized for your machine and will theoretically perform better.
read up
here, and read the kernel howto @ linuxdoc.org.
the steps to making your own kernel really arent all that complicated, the theory behind it is what takes longer to learn.