You might want to try turning on Dynamic Input. It gives the parameter value in the model space window as you stretch. You could add the visible but non-plotting values, but I usually prefer to avoid unnecessary visuals.
You could use visibility states as you describe but that leads to a lot of unnecessary repeated linework. There are a few reasons why this can be less desirable. Here is a non-exhaustive list. The blocks become larger than necessary resulting in larger file sizes. They can become slower to respond. Any future changes to linework needs to be repeated for each of the visibility states rather than done just once. If you find you need an additional size in the future, it is more work to add the visibility state than it is to add the necessary list/lookup values. Only one visibility parameter can be added to a block and using that in an unnecessary manner can significantly limit the ways the block can be expanded in the future.
You can alter attribute values automatically by using either fields or by using a block properties table to write the values directly. Those methods result in fewer attributes required and most of the aforementioned benefits.
Instead of using individual visibility states, IMO a better approach would be to use either a lookup or a block properties table for the set sizes and keep the stretch actions. That way the end user can use either the stretch actions or the lookup/block properties selection based on their own preference. See screencast which details various ways to do the block.
c4041ae3-38d5-4eea-91b4-faef6d30cca9,640,710