With "geek" it's a matter of emphasis. The prototype is the same, but it's generalized differently. To a lame-o mainstream person, geek just means a frumpy, weird, socially unsuccessful, and possibly smelly person, but to a geek, it's all about pursuing interests in a particular way. Both definitions include a common group of core prototype geeks who look and act a little weird and have an obsessive interest science fiction and/or fantasy. In the lame-o jock douche (pardon me; showing my prejudices) definition, those prototype geeks get lumped in with all the frumpy, weird, socially unsuccessful, and possibly smelly people, which includes many people with intellectual disabilities, whereas by the cool geek definition, they get lumped in with anybody who is passionate about their interests to the point of being regarded as a little weird, which includes many geniuses in diverse fields. The difference can be summed up by asking, is Milhouse a geek ("I'm not a nerd, Bart. Nerds are smart,") or was Einstein a geek? They're different generalizations from the same prototype.
For the mainstream, the prototype hacker is someone who does something nefarious over the internet with no regard for any damage he or she might do. That's not the same prototype we have in mind when we say "hacker." We include those guys with a certain amount of reluctance and distaste. To us, the prototype hacker is somebody like Richard Stallman, the Richard Feynman of Surely You're Joking, Mr. Feynman or What Do You Care What Other People Think, or the folks who perpetrated the classic MIT hacks (http://hacks.mit.edu/Hacks/misc/best_of.html). Most people wouldn't even understand why we include those guys unless we explained.