> Now, I have to check each field individually, in manually written code, to verify that no required fields are missing.
You always had to check the individual fields for the zero value. A required field in a proto2 message can be set but also have the default value and pass initialization.