Hard math is the hardest thing that I can think of. One can learn most other things with enough effort (ie, repetition), but hard math takes immense thought.
Cantor's proof is a clever little thing. These sorts of proofs can be daunting at first but they become easier, even delightful, as one becomes more familiar with their kind. If you studied the foundations of math in school for as long as an American student takes English literature courses then these proofs would be second nature to you. They aren't really hard, just written in a language unfamiliar to most people.
Then there are the long, hard slogs. Lemma after lemma, with no clue as to where the author is leading, until finally, after an exhausting march, he bludgeons the reader into accepting his conclusions. These are pretty hard for anybody to understand because you can't hold the whole thing in your head. You just have to convince yourself of the truth of each step.
"Hard" is of course highly subjective, but the material in this article is standard (usually sophomore-junior) undergrad material and is very widely used.
I was just teaching a class on this topic (Hilbert's Hotel, and the cardinality of infinite sets) to a group of elementary-age learners last Saturday morning. These ideas have a lot of appeal, and if young learners find out early that infinity is not a number, but is a very deep concept, they can gain a lot of motivation for thorough study of math.
Very widely used for non-useful uses of used. There aren't a lot of infinite sets in applied math. (The closest thing that I can think of to an actual application was http://xkcd.com/195/ and the same trick has since been used for visualizing other complicated large linear sets.)
Most banal example is intervals in the real line (e.g. reals between 0 and 1), which show up all the time. But comfort with infinity is needed for other uses also, two examples being convergence and asymptotic analysis of practical algorithms (optimization, statistical estimation, signal processing, machine learning, geometric algorithms, ...) and showing that two classes of objects are equivalent. The latter is useful because it can let you switch representations of things according to which is more efficient in some implementation, or because it shows that two seemingly different objects are basically the same. Any class of objects that can be parameterized with a real-valued parameter (e.g. probability distributions) forms an infinite set, and it is often useful to be able to say things about a whole category of problems at once, even for practical purposes.
Eh, number theory has a certain draw to it. For one, if you're presented with a problem ostensibly you have all the tools you need to solve it (or you have all the tools you need to build all the tools you need to solve it). There are certain sections of math which I am certainly poor at (complex analysis has just never "clicked" in that way with me) and some sections of math which I'm pretty good at (I have a certain affinity for graph theory). I think different problems require different mindsets in approach. If that mindset comes easier to you then solving problems in that domain may come easier too.
On the other hand, it is also rarely necessary.