An @internal class still may be used by the consuming code as one of its non-internal parent types. If a breaking change happens in the non-internal subset of the ancestry tree (e.g. the class loses one of its parents), it will affect the consumers of the class even if it's internal.
See doctrine/dbal#4100 (comment).