Actually, you can just have a public version of a struct and a private version of a struct with more fields.
You can give callers the public version and then cast it to the private version for internal usage.
You can give callers the public version and then cast it to the private version for internal usage.
I guess my point is that there’s a whole bunch of caveats in regards to safety that need to be considered in your solution.