Note that one of the Shneiderman's Eight Golden Rules of Interface Design is Enable frequent users to use shortcuts:
As the frequency of use increases, so do the user's desires to reduce the number of interactions and to increase the pace of interaction. Abbreviations, function keys, hidden commands, and macro facilities are very helpful to an expert user.
Never ignore power users. There's a big trend to keep stuff simple and weed out unnecessary buttons; that's great. Making all actions discoverable and workable without keyboard shortcuts? Cool.
But the problem is keyboard shortcuts are free efficiency. Efficiency is one of the
most important parts of Human Computer Interaction; it's allowing users to complete their tasks as quickly and as accurately as possible.
Keyboard shortcuts don't clutter interfaces. There's pretty much no risk in including them because of this. Sure they aren't as discoverable (See Sam Hasler's answer for a helpful way to combat that), but that almost works to your advantage. "Invisible" keyboard shortcuts allow you to give power users all the efficiency you can while keeping the visible interface uncluttered and discoverable for non-power users.
This is of course in addition to the matter of Accessibility mentioned in other answers; keyboard shortcuts can often be much easier than attempting to select features via the "mouse" if controlling via keyboard only. If you've ever tried to tab through a form on a website, then try to get back to the Address bar, you'll note it's pretty painful. Iterating through all items on page is pretty unacceptable; instead keyboard shortcuts can allow immediate access to common features, like Alt F4 to close.