Мое предложение состоит в том, чтобы использовать структуру "веревки". По сути, это древовидная структура, обычно это сплайс или пальчиковое дерево, в котором вы можете изменять только части дерева. Правильное выполнение этого позволяет вам получить лучшее из обоих миров: неизменность и быстрые обновления.
Я не знаю о реализации веревки, но это то, что вы хотите сделать.
Альтернативой является использование ets в качестве изменяемого массива. Это довольно быстро для такого рода вещей.
Третий вариант - использовать пространственную древовидную структуру для представления вашего мира. Octrees или BSP-подобная структура - это то, за что я бы слепо ухватился.