You misunderstand me. I am not advocating replacing the more efficient access code using offset plus length to ALWAYS calling ISGetIndices() and using the indices to do the access. I absolutely am not advocating that. Recall we sometimes have subclasses that do not implement (or get used) all the methods of the base class.
What I am advocating is recognizing that PetscSection and IS have (in the abstract) very similar jobs and thus organizing the source code (naming, possible methods etc) to reflect this. Rather than having seemingly two completely unrelated classes.
For example, and I'm not advocating this naming, we could have a base abstract class of PetscIndex with PetscIndexIS and PetscIndexSection, now people always see the connection. The weakness of this exact approach is though both things are related to indexing, it is not clear they have any common methods (as you both have pointed out) so "deriving" them both from PetscIndex might not be best.