Почему объект доступен из замыкания?
Добрый день. 
Вы удаляете ссылку на объект в переменной user, но не сам объект и не саму абстрактную ссылку (их может быть много). В js нельзя удалить объект, его удалением занимается garbage collector, вы можете удалить все ссылки и тогда объект будет удален из памяти. 
При передачи объекта в замыкание, там сохраняется ссылка на него, а не на переменную user.
Собственно, даже чуть более простой код будет работать точно так же:let object = { test: 'hey' }

let another = object

object = null

console.log(another)
// { test: 'hey' }
В setTimeout вы передаете сам объект (ну точнее ссылку на объект), а когда вы дальше пишите user = null, то вы по сути просто присваиваете этой переменной другое значение, а не удаляете ссылку на тот объект. Надеюсь объяснил достаточно доступно.