To summarise for anyone reading this. Thanks to the answers above.
You can assign a dynamic property, with a name and value of your choice, via QWidget.setProperty("cssClass", "large").
The stylesheet can match this via selector *[cssClass="large"] { ... }.
You can assign multiple values to the property via QWidget.setProperty("cssClass", [ "bold", "large", "rounded" ]). (Or it accepts a space-separated string via "bold large rounded".)
The stylesheet can match one of the values via selector *[cssClass~="large"] { ... } (note the ~=).
Note that property named class is a special one, referring to the Python/C++ code class of the widget, which you probably should not assign to.