Because rules engines read the attribute enum list and allow you to pick which one to trigger on.
With a String data type, that doesn't happen.
Having the ability to modify the enum list at run time, as part of a configuration step is a very valid use case.
I have an application that enrolls many different sensors. Those sensors all use the same data model, but need to report it differently through a common attribute, depending on a readable configuration byte. I'm faced with the decision whether to create many different drivers that differ only in their attribute enum set or a single driver with an all encompassing attribute enum set. I chose the latter for simplicity, but would greatly appreciate the ability to modify the enum set at runtime, based on that configuration byte.
At present my attribute enum set looks like this:
attribute "state", "enum",
["open", "closed", "wet", "dry", "motion detected", "no motion", "smoke detected", "no smoke",
"co detected", "no co", "shatter detected", "no shatter", "panic detected", "no panic",
"high temp detected", "low temp detected", "temp ok"]
That's 9 different sensor types, all in one driver, which is super convenient. However, when building rule triggers, the full list of enums show up even though the configuration byte suggests the sensor is a water sensor. Still, this inconvenience is preferred over having to manage 9 different driver files.
So yes, a runtime setValues(List enums) command would be useful.