I was not satisifed with the way the field is dimmed and the value can't be accessed in a color field when it is read-only.
I added custom
set methods to ensure the user can't modify it from the interface, while being able to click the field and copy the values inside the RGB widget.
bpy.types.Object.my_prop = bpy.props.FloatVectorProperty(
set=lambda s, c: None,
get=lambda s: s["my_prop"],
for obj in bpy.data.objects:
obj["my_prop"] = (0.5, 0.3, 0.2)
You can still change the property with a custom Hex value using the interface, but I guess this is managed differently so I don't know how to prevent that. You can also change the HSV sliders but the changes will be discarded when you exit the widget.