Daggerfall system wasn't that bad, the main flak it gets is that it can be abused, which is not a flaw per se. No one forces you to be a bunny hoping asshole.
Problem is, as designed, this is a hard problem to solve. You almost need to have a mechanism in place that is able to limit the XP the player gets for certain activities, or recognizes the possible abuses and exploits; that, or a global limiting mechanic of some sort. Both are not necessarily ideal solutions depending on the game
Level comparison between player and enemy works for combat. If a player is level 20 and the enemy is level 5, the player shouldn't get any XP from dominating it. Oblivion let you hold your shield up and block Mudcrab attacks, and you could just stand there holding the button down, walk away from the computer and come back an hour later to find your block skill fully trained. Not good.
However, level comparison does
not work for non-combat applications. How do you know the player is sneak-walking into a wall instead of around enemies? If the enemies never move from their patrol routes, you can just "walk" into a corner forever and gain XP. Sure, you could actually compute the physical distance traveled, but that would add a greater performance overhead that might not be suitable on your given platform.
And what about other stuff, like speech? In Elder Scrolls games, at least speechcraft is limited by the number of NPCs available to talk to, but that still doesn't quite prevent abuse. In other words you have to come up with special scripting to handle every possible skill use and find out what the player is doing, why, and if it seems like an exploit, stop rewarding XP. That can be done, but it'd probably take a hell of a lot of trial and error to determine what is an exploit and what's not.
The problem becomes even more confused when you deliberately let the player do "skill training" applications to level up quickly. Arguably this is a good feature to include in the game - it means that if you are replaying and want to level a skill fast just to skip the boring early game, you can. So how can you tell the difference between this, legitimate leveling, and exploits?
I think one of the better solutions is to take a modified approach to what Oblivion did with resting. In Oblivion you could train skills as much as you wanted, but attributes would only go up a certain amount before you were forced to level up by resting in bed. This is not a bad idea in practice but the implementation in Oblivion was bad because of the way it forced you to manage your skill use to obtain good stats.
I think you could help solve this problem by putting a cap on simply how many skill increases you can do at once before you are forced to rest (maybe 5 in one skill, or 10 across all skills), but this doesn't really solve the problem so much as introduce an extra layer of tedium that must be shared by all players. Just like a hunger and thirst system, it becomes busywork rather than a fun gameplay mechanic - and all players should not be punished just to prevent a few from abusing the system.
If nothing else this kind of just tells me that the Elder Scrolls series would be better served with a conventional XP system rather than the per-use system that is traditional. In such a system, you have limits which much more closely tie in with the regular game activities of killing monsters and doing quests, including the number of enemies in a location, the player's level vs. enemies, the amount of time passed, and so on. Sure, you could train speech by killing Mudcrabs, but... that's arguably a small price to pay on the realism side, and because XP would theoretically be a limited resource thanks to a level cap, you'd still be making a decision about how to build your character every time you chose to spend XP on a skill.