Итак, требования таковы: вам нужно перечислять через IList <>, не создавая копию, одновременно добавляя и удаляя элементы.
Не могли бы вы уточнить несколько вещей? Вставки и удаления происходят только в начале или конце списка?
Если изменения могут произойти в любой точке списка, как должно вести себя перечисление, когда элементы удаляются или добавляются рядом или в месте нахождения текущего элемента перечисления?
Это, безусловно, выполнимо путем создания пользовательского объекта IEnumerable с, возможно, целочисленным индексом, но только если вы можете контролировать весь доступ к вашему объекту IList <> (для блокировки и поддержания состояния вашего перечисления). Но многопоточное программирование - сложная задача в лучших обстоятельствах, и это сложная вероятность.