Предположим, что вы пишете функцию, которая принимает std::initializer_list под названием list и что для функции требуется произвольный доступ к элементам list. Было бы удобно писать list[i] вместо list.begin()[i]. Итак, почему std::initializer_list не предоставляет определение operator[]?
Я не могу думать о каких-либо случаях, когда возвращаемый const T& const T& не был бы корректно определен. Эффективность здесь, похоже, не проблема, так как std::initializer_list<T>::iterator имеет псевдоним const T*, который явно является итератором с произвольным доступом.