Я не вижу причин, почему то, что вы опубликовали, не должно работать? Просто сделал быстрый тест, и он хорошо компилируется, но выдает предупреждение о сокрытии. Это можно исправить, добавив новое ключевое слово, например:
public interface IMutableUser : IUser
{
new string Username { get; set; }
}
Альтернативой может быть добавление явных методов набора; например:
public interface IMutableUser : IUser
{
void SetUsername(string value);
}
Конечно, я бы предпочел использовать сеттеры, но если это невозможно, я думаю, вы делаете то, что должны.