Как передать ошибку пользователю в MVC?
не использую костылей подобных сувания ошибки в сессию
это и есть единственный расово верный способ.
Использовать flash сообщения через сессию.
передавать через контроллер, но при этом придется совершать в нем множество проверок, типа проверка на уникальность пользователя, пустоту полей, идентичность паролей
Этим вы делаете толстый контроллер. На самом деле форма - это модель. Это страница на которой есть своя логика, и в зависимости от действий пользователя она меняет своё состояние, которое и отображается пользователю. 
И вот логика формы реализуется в модели формы, которая в свою очередь может дёргать более глубокие слои приложения.
Таким образом задачей контроллера становится только получение данных из http запроса, засовывание их в модель и вызов у модели одного-двух методов.