А зачем вам в дата-класс инжектить сервис? На вскидку могу предположить, что можно добавить EventEmitter у User и в компоненте (или там, где вы используете) подписываться на события и дальше уже работать через сервис.
В вашем примере я бы заменил getter address в User на getAddress(byUserId) в UserService, например.
Сергей, в 6ом ангуляре можно провнрнуть через Element. Сильно не вникал, но как натолкнулся - сразу вспомнил про этот вопрос. https://youtu.be/y73NMviRoPY
По моему скромному мнение, лучше, чище и понятнее от такого подхода не станет. Количество скобок останется, только добавится еще один уровень вложенности, который будет сбивать с толку.
Может я что-то пропустил, но в ангуляре нет такого понятия, как умные и глупые компоненты. С реактом не сталкивался вплотную, как, наверное, и большинство ангуляр-разработчиков. Поэтому советую привести более подробное описание данных понятий.
Два раза делать поиск по id не самый лучший вариант. Лучше записать document.getElementById('поле') в переменную и уже переменную проверить на null и производить какие-либо действия.
По поводу второй ошибки.