"Idiot" and "Moron" started out as medical terms - people then started using them as insults, so they shifted to "Mentally Retarded", which actually just means that there is a malformation in the brain which causes cognitive and adaptive impairment. Doctors still use the term "mentally retarded", but it is falling out of fashion - instead the medical community prefers "Intellectually disabled" or "developmentally disabled" - which aren't perfect terms either, since Intellectual disability can refer to ANY cognitive impairment, including ones obtained through life, whereas Mental Retardation specifically refers to congenital mental impairment.
The problem is, no matter what word you use, nasty people will turn it into an insult. I mean, even calling someone "special" is an insult, if you do it with a certain tone. "Oh yeah, that kid... he's, uh.... special" is an insult I've heard many times.
The problem is that we, as a society, devalue those who are less intelligent. We do. We pay them less, we treat them with amazing condescension, and we ignore them all the time. We live in a society which prizes intelligence, capability and ability, and we don't value those who are, perhaps, not as capable in intellectual endeavors. Which is why, no matter what word you use to describe the intellectually impaired, someone will turn it into a word of abuse. It's an ugly aspect of humanity. What we need to do is fix society's attitudes, so that we don't dehumanize those who have intellectual disabilities. I'm not sure if we'll be able to do that, though. I mean, when you call someone "stupid", (and we've all called someone stupid), we are trying to hurt them by suggesting that their mental capabilities are less than stellar. This is an insult used by even the most Left-wing of my friends, the ones who ostensibly should never judge anyone based on their mental abilities. Yet, they do. We all do. And that's a sad reflection on the state of our species.