Почему работает выход за пределы границ массива?
Выход за границу аллоцированного блока памяти в C/C++ сопровождается неопределенным поведением. Неопределенное поведение, в редком частном случае может совпасть с ожидаемым поведением. 
Допускать состояние неопределенного поведения в программах нельзя - это ошибка. Исправляйте.
Среда выполнения намеренно не выполняет проверку на выход за границу индексного оператора, дабы не тратить драгоценное время процессора.
Нет не должна. Права доступа даются на страницу памяти, которая обычно 4096 байт. И пока из страницы не выйдите, точно ошибок не будет. А если еще и дальше страницы будут идти с правами на запись, то опять же ничего не будет падать. Если хочется проверять такие ошибки, используйте статические анализаторы.