In addition to these great reasons to compile; when you configure a package (before you compile it) you can choose what features you do or don't want. with a binary whoever compiled it for you made that choice and there is no way to add features without recompiling it. for example I don't like KDE/Qt based stuff I use XFCE it works very well with gtk stuff; there are lots of programs that can be compiled to use gtk instead of qt (and vice versa if your into the bloatware thing) this makes them run faster and look nicer on my system. Another example; I have an iPod video, I like ffmpeg for my video encoding needs. most methods for making a video for an ipod with linux involve two passes one for video and another for audio. ffmpeg supports aac audio if enabled at compile time. So while ffmpeg won't be able to do the audio for an iPod video when installed as a binary on most distros, mine can so I can encode movies for my iPod in 1 step. I save time and it is a much simpler method then demuxing, encoding audio with one app, encoding video with another then multiplexing them back again.
Portage; gentoo's package management system automatically takes care of dependencies, configures acording to my 'use flags' and then compiles them.