In order to specify what the subsurf modifier should smooth and how much, you can use the Mean crease setting. This will allow you to (basically) tell the subsurf that it can subdivide an edge, but leave it sharp (instead of smoothing it). There are other techniques for getting sharp edges in an organic model workflow, most of which are discussed here.
- It discusses using more edge loops very close together, which is effective, but very inefficient.
- It discusses using weighted creases (which is what I recommended above)
- And it discusses the edge-split modifier
...all of which are effective tools for making sharp edges. Each has its benefits and draw-backs.