Also some front ends do (mine does... but I haven't uploaded the latest code to sourceforge yet)
But controls.dat is VERY limited. Only about 1/50th of the games are in there. Why? They go for accuracy. So if they aren't 100% sure what the names are, they don't add it.
So my frontend will first check controls.dat for an entry... If not, it will check mame. So all games it will show the type of controls and highlight the buttons that it uses... but it wont label the buttons unless you have a controls.dat entry. But you can override them. So you have a game that your kids like, but they need to be reminded of the controls... Just pull of the edit screen and fill in the strings.
The last time I looked 1/50th is 2%
http://fe.donkeyfly.com/controls/supported.phpI am seeing 14.4% directly supported, 20.9% indirectly supported (because clones tend to have the same controls), and 3.7% that could be related (because of romof, like
neogeo, but half of those might not use the same controls

) Remember, we are not going to put in clones that have same controls as parents, you can just look up parents info then. And parent/clone info is readily available in mame. no need to store redundant data and take up space.
Over 1/3 of the games in mame can be looked up via controls.dat. That is a pretty large chunk considering mame got rid of the test driver status so games like dlair exist in mame with no control info defined in the driver (out biggest problem these days with entering in new games). Even your FE is not going to filter those where they are suppose ot go. So it is not VERY limited. A large chunk of the games that are playable is covered by controls.dat.
To answer HoopstarsGarage's question. Like 2600 said use buddamame for in game reminders, use something like jfront or mamwah with johnny5 to view the controls before you start the game.