gl_ClipDistance vs gl_CullDistance Why are there very similar yet distinct arrays: gl_ClipDistance[] vs gl_CullDistance[]?
What would be some use cases where the need for two distinct entities become apparent?
The two are different because they do different things. Clipping and culling aren't the same thing at all. If an edge crosses a clip plane, the primitive has to be clipped to be within that plane. This means generating new primitives from the old one.
If any vertex of a primitive is outside of a cull plane, then the entire primitive is culled.
You use the cull planes when you want the VS to be able to cull out primitives based on some calculation. You use clip primitives when you want primitive rendering to be bounded to some non-clip-space region (though line and point width can violate those borders).