В C# класс(User, Object) определяет реализацию и тип одновременно. Интерфейс(IUser) определяет только тип. Один объект может иметь несколько типов. В свою очередь один тип может иметь несколько реализаций.
У созданого вами объекта есть как минимум три типа: User, IUser и Object.
Т.к. все классы в C# наследуются от Object(а значит все объекты имеют его тип), компилятор знает об этом заранее и поэтому дает возможность вызывать методы декларированные в Object из переменной любого типа.