Narrowly UUID is actually candidate for something we have considered support for, but there's a lot of ecosystem issues with introducing new types and so we don't have immediate plans for it (
https://github.com/protocolbuffers/protobuf/issues/25159 is the tracking issue for that category of thing)
In general Protobuf libraries intentionally does not support layering up arbitrary user types on top. There's many problems with supporting that shape of API, including that you create a problem of having content which is valid as per the schema but where only in your additional special handling it is invalid. One of the lessons of required fields being harmful is that its actually better for the parse to only validate that we can parse it, and leave "this thing matches the schema but may need to be rejected due to additional expectations of my application code" as a second pass pushed into the application code layer instead of coupling it to the protobuf structs / protobuf parse point.
We do know that isn't ideal for all usecases, but its the balance that we have settled on as globally best decision for the Protobuf libraries.