As you know, for any given block, only states returned by getStateFromMeta(int) are stored to disk. Additional states returned by getValidStates() are not. Your best bet would be to see what properties in the set of states returned by iterating through metadata 0-15 never change (and do change in getValidsStates()). All 16 states returned for the dirt block from getStateFromMeta for instance will be snowy=false, as that is not stored.
This will not be true in 1.13, where blocks will not be limited to 16 (storable) states. Presumably every possible state will be stored.
I'm not getting the pushback here. His mod deals with stored world data files, and the integers are still heavily used in the anvil files. This will change of course, but is totally applicable for a program that runs without even having Minecraft (with its nice int to blockstate mapping) running. If you're going to deal with savefiles, there's going to be some numbers involved. Of course things will get more complex in 1.13! Which will of course include the numbers to blockstate mappings in the savefiles, but those are not yet in 1.12 and below, so again I really don't get the pushback against using the numbers. You simply have to when dealing with (generating, editing) savefiles without Minecraft running.