On https://www.mediawiki.org/wiki/Special:GadgetUsage I see "-WmfProjectStatusHelper" for example, but I removed that gadget a few months ago. It's not surprising that it still is in user_properties rows though. This should be filtered out at some level.
|mediawiki/extensions/Gadgets : master||Remove non-existent gadgets from Special:GadgetUsage|
No, that just checks if the name is technically allowed. To verify it is still an active gadget, just check it is in the array returned by GadgetRepo::getGadgetIds().
Shouldn't there be a periodic query or something to remove rows from the user_properties table itself when a gadget is removed?
The rows are automatically dropped whenever a user saves their preferences, so it'll go away over time. But it is generally a problem, hence the bloat ticket Helder linked.