Почему данный код выдает ошибку?
Потому что внутри IIFE this - window.

https://habr.com/ru/post/149516/

Уточнение: в strict режиме (введен в es5) this по умолчанию - undefined
а с es6 strict режим включается автоматически если использовать в коде любую синтаксическую конструкцию из es6+
Внутри скобок создаётся и тут же вызывается функция. (IIFE – immediately invoked functional expression)

this для функции, объявленной как function определяется в момент её вызова. Если её вызывают будто она свойство объекта, этот объект будет this'ом.

Внутри скобок function сама по себе, ни к кому не приделана, разве только к Глобальному. В данном случае window. Поэтому там this === window.

Ну а window это не user. И там нет искомого свойства, скорее всего. Или есть, но неожиданно другое.