при каждом запросе лезть в базу вроде как не круто, хоть и иногда неизбежно, тут посмотри в сторону JWT.
а циркуляция зависимостей решается выносом из цепочки в отдельную зависимость "двусторонней части", т.е. в твоём случае мидлвара, роуты и пользователи должны быть отдельные модули.
(P.S. соответственно и точка входа в приложение - так же отделена всего )
...ну и встречный вопрос, реально думаешь сделать лучше чем в nest.js ?
это не реальный проект, я конечно же мог подключить какой то typedi, tsyringe, inversify, или даже сам нест, но я хочу попробовать реализовать это без доп. зависимостей
в базу лезть ок, давайте не будем начинать очередной спор про jwt :D