У тебя просто пример классный) И не обрабатывать, а в худшем случаи принять ид (курсов которые он уже прошел) и передать обратно (найти те которые остались), тем более это будут таблицы связанные друг с другом, а вот сам пользователь тут не причем. Пользователи отдельно, курсы отдельно.
Это был упрощённый пример. И это не единственный запрос такой. В этом ещё ничего агрегировать не надо было, просто выборка сложная, без агрегации, ранжирований.
То, что ты предлагаешь, работает только для простого crud api, где надо взять положить сущности, иногда с подсущностями в простом дереве сущностей.
И то, что ты предлагаешь, не только заставляет писать императивно на JS кучу кода обработки кучи данных, с которым куда лучше справится СУБД.
Но и лишаешься того, ради чего мы вообще используем РБД: целостности данных, например.