The "private" (underscore-prefixed) members should not be mentioned here. Extension developers should not be accessing them, so they don't need to know about them. What they need to know is that if they had been adding operations to cmdutil.unfinishedstates, cmdutil.afterresolvestates, or cmdutil.STATES before, they now need to use state.addunfinished().
I now see that state.addunfinished() has **kwargs, which means they will have to look at the _statecheck class after all. Perhaps we should copy the arguments over from the class to the function (and remove the defaults from the class) so it's easier to find them?