Most of my plugins have ten-bazillion presets, so I use the states to affect which preset appears in a rack set to that state.
This is easy in plugins that expose their presets to the drop-down list, but others require you assign names to the slots in the drop-down to make this work. See this post for a good explanation on how to do that.
Also, this blog post shows the Program Change Remapping feature that might be handy for you if you have a pedal that increments by one as I do (using CC#12 and the program advance feature found in C3’s options).
@Neil_Durant also mentioned using “Load state by Program” in this post, which is a bindings trick, but I cannot find any other information on it at the moment: