Таким образом, кажется, что Step2 является частью интерфейса - что абоненты этого класса ожидают, что смогут вызвать Step2.Но то, что Step2.1 и Step2.2 являются деталями реализации, то, что вы не хотите, чтобы вызывающие видели, хотя это будет реализовано всеми реализаторами интерфейса - я правильно понял?
Если так, то я бы включил в интерфейс Step1, Step2 и Step3 (только).Абстрактный класс будет реализовывать Step2 и дополнительно определять защищенные Step2.1 и Step2.2, но определять их как абстрактные, тем самым вынуждая подклассы предоставлять реализации.
Если вы не подразумевали, что Step2.1 и Step2.2 идентичныво всех подклассах, в этом случае я бы сделал их закрытыми и поместил их в абстрактный класс.