The ulterior motive is actually to reduce members in the packet_info* structure. Some members could be converted to using p_get_proto_data/p_add_proto_data, but the "protocol ID" is required for that API. While I've seen it hacked into a few places in the GUI, I think it's better design if only a dissector has access to that value.
Why? I think a few dissectors already share that value for determining the value of the parent protocol (since that is stored as a list of protocol IDs now) and I don't see any particular reason to restrict protocol IDs to just dissector code?
The idea is to have the dissectors themselves determine what gets presented in a "Decode As" by registering a "decode as structure".
I'm missing how this is related to removing items from pinfo.