We already have a maximum diff change which is at the moment the factor 4 afaik. As you could see during the last retarget we didn't jumped from ~2.5 to around 22. We jumped "only" to 10.x.
My proprosal would be to decrease the maximum retarget factor to 2 and add a kind of fallback for the time WHEN the retarget happens. Something like: Retarget after the next 2400 blocks OR in 8 days from the last retarget, depending which critieria was fullfilled first. Due to this we wouldn't stuck for such a long period and due to the lower factor the adjustment would be smoother.
I've never developed a coind neither i have checked the implementation, so i don't know how easy it is add such functionality. Also i don't know the drawbacks of such a solution. But from my point of view it doesn't sound really tricky... =)
Edit: Well sorry ... my proposal is basically what ToxicDartFrog wrote ^^ ... nevermind, haven't read it carefully enough ..