***** NOT A TEACHER *****
(1) I am not capable of explaining why, but "I have learned English for three years" sounds very strange to me while "I have studied English for three years" sounds fine.
(a) Does it have to do with the difference between "learn" and "study"?
Just wondering. Can't put my finger on it.
Yes, I too have been pondering it. Your comparison with the word "studied" is a great help. You can say "I have studied English for three years" without it indicating whether or not you have had any great success. However, the word "learned" indicates that you have, in fact, really learned it. It is a completed action. And that leads to a problem, since we wouldn't do a completed action over a period of time.
Try it with these sentences.
"I have been learning to tie my shoes for six months."
"I have learned to tie my shoes for six months."
That wouldn't make any sense. At some point in those six months you apparently learned to tie your shoes. Why would you then continue learning what you have accomplished already? If it was only at the end of that time that you learned to do it you might say:
"It took me six months to learn to tie my shoes."
Or, if you wanted to leave your level of success unclear, you could say, "I have studied shoe-tying for six months." That would, in fact, make sense, although the concept is a little strange.
I'm sorry for the long ramble. I hope it is of some use in unraveling this conundrum.