Смотри в чем дело. Когда ты делаешь это через forEach ты знаешь, что САМ изменяешь значения в своем Map объекте. Объект Map остается тем же, что был, ссылка не рвалась, в памяти это тот же самый объект. Если бы был метод .map() он бы либо возвращал новый объект (занят другой участок паямти), либо мутировал имеющийся, что как бы .map() делать не должен по своей идеологии.
Я понимаю что это затратно по памяти и скорости. Это же никого не волнует для массивов, там же практически такая же ситуация, кроме того, что ключи только числовые