Grinding seems to have a simple solution: give each task a difficulty level (maybe equal to chance of success), and give experience based an difficulty and current skill. If a novice thrower throws a stone to an empty place several steps away, he will have some experience; but if a legendary thrower does the same he will get none.
That does make grinding harder, but that can just be solved by switching to repeating a task of the higher difficulty. For example, once you're getting 0 experience for throwing a rock at a tree 5 feet away, move to 20 feet away to get experience again.
One problem with it is that it would also make legitimate skill gain harder to do as well. Instead of needing to simply find a place to use the skill, you'd also need to make sure that it was a level-appropriate challenge.
Hmm. I'm looking at the problem from a slightly different angle. I wasn't looking for making the game more interesting, but instead more realistic. So in RL you can train by repeating something over and over, but it must be at appropriate difficulty level. Look at the sport for example: professional sportsmen train many hours a day every day, and there is no other way to win.
As for the example with stone throwing - throwing to a good distance will only give you some low level of skill. Hitting a standing target is a little harder, a moving target is harder, a moving-and-dodging target is much harder. So a master thrower will have to pierce an eye of a quick running enemy in a helm and with a shield. And a legendary thrower will have to kill someone with a ricochet from someone else

Using skill when needed (for a quest) doesn't always mean it was educational. If a king asks a legendary hammerer to punish a peasant it doesn't mean that the hammerer will learn to fight better.
----
As for DOR cap, I like the idea of having to do several different activities to advance. I once thought about a more simple idea of having 'theory' and 'practice' level in each skill, first is gained by talking and reading (maybe teaching/writing on higher levels) and the second by using the skill; when there is a gap the progress of the higher is lowered (down to zero when the gap is big enough).
I think your suggestion is great for a full rpg game. The problem is that DF has its fortress mode (which is much more important for me), and it seems hard to implement such system for a whole fort of ai-driven creatures.
---
As for having to wait before repeating the task, it seems that it would be good together with some other changes, not alone. BTW maybe skill rusting will force you to do multiple activities during the day.