The main difference between -得了 and 能 is that -得了 can only be used with a fairly small subset of verbs, while 能 can be used with most verbs; for example, we can say 能看見, but 看見得了 sounds quite odd to me.
I believe this is because -得了 has a more specific meaning than 能, which is as generic as you can get, but I can't immediately provide a reference for this. Another important difference is that 能 can be used with a whole clause:
他還能一邊唱一邊跳, 真厲害. He can sing and dance at the same time, impressive!
There is no way to stick -得了 into this kind of sentence; it is a verbal affix, so can only be used as part of a relatively simple sentence.
Later note: I changed the example above from 能看 to 能看見. This may work better. I Still haven't found leading references, but here is one article that discusses some of this: 郝維 2001〈補語的可能式研究綜述〉,《漢語學習》3:29-34. In particular, the article notes that -得了 is usually used for actions that can be completed. This seems right, so in the zillions of cases where we want to speak of general ability, -得了 is often inappropriate. An example:
他能彈鋼琴 He can play the piano. (ok)
?? 他彈得了鋼琴 He can (finish) playing the piano. (odd)