these are two different features: read-only and guarded properties.
both can be implemented as a hack, or workaround, in each individual component as there is no such feature provided in qml.
we can either fallback to C++ or add indirections (or function calls) to ensure the properties are read-only (in this case the user would still be able to write to the property, but immediately it would get back to the original value) and guarded.
is this task blocker for the project? I think it is important (P1), but for a first release describing those limitations in the api could suffice. if it is really blocker then we need to create a workaround and enfore all components (from all styles) to use those workarounds in the implementation.