Почему в интерфейсе нельзя использовать protected или private?
Интерфейс предназначен для декларирования внешнего API без уточнения реализации. В нем должны быть  лишь публичные члены.
Вообще говоря, это искусственное ограничение, принятое для удобства. В том же C++ в качестве интерфейсов используются чисто виртуальные (абстрактные) классы без состояния. Наличие же специальной синтаксической конструкции (интерфейсов, как в C# или Java) позволяет явно подчеркнуть, что программиста там не ждет никакого сюрприза и этот тип используется как "клей" между другими классами.
Можно использовать и protected, тогда это будет еще и интерфейс для дочерних классов.