Неужели такой подход оправдан с точки зрения ресурсов (памяти в данном случае)?
В функциональных языках, в том числе в Scala используются т.н.
persistent data structures. В памяти хранятся ссылки на предыдущие состояния структуры данных и изменения. Это имеет смысл в сочетании с упомянутой вами сборкой мусора. Разумеется можно просто копировать всё, но на деле так никто не делает. Поскольку в ФП очень много используются структуры типа списков и деревьев, для них это легко реализовать эффективно.
Рекомендую почитать (англ.) википедию по ссылке выше или вот эту
вики на русском.