We would like to have a very flexible and reusable data model in Pega.
Request - This entity captures requests
RequestType - This entity captures different request types
Attribute - This entity captures attributes that will be used by requests of different request types
AttributeValue - This entity captures values assigned to specific attributes
RequestTypeAttributeValue - This entity captures which attributes with pre-configured values can used for a specific request type
RequestAttributeValue - This entity captures association of attributes with pre-configured values to requests
There will be other entities such as Service or Party and these will reuse the attribute from the Attribute entity.
When a user is populating a request of a specific type, he should be able to see which attributes and values are available for this request. Then a user will then select the required values and submit the request. The attributes with values for a submitted request will be captured in RequestAttributeValue entity.
What you describe should be doable. I'm not sure if I understand why you'd want to have that level of abstraction, but if you have a business need to do so (instead of say, putting the values into a class structure) there are all sorts of tools you can use to meet your needs. Consider reference properties and data pages for pieces of your design. As your links point out, you may need to step outside the guardrails to accomplish this.
So you are trying to generate a data model based on key value pair concept. Instead of using declare expressions, you can leverage page groups or value groups to do similar, where the subscript becomes the attribute name, and the value (or property in that page group) will be the attribute value.
We've implemented a similar concept to abstract different categories of data which makes it easier to render on screen, as well as extend if we need to.
The challenge is that you will always have to maintain the correct mapping between attribute name and relevant downstream logic. You can use existing pega API to set property by reference (if you choose to), but ultimately, unless you have a well defined data structure to link attributes (ex. attribute having some unique reference ID or unique name), this will have some maintenance overhead.