получаем нашу статью или 404 и передаем во view
Статью или exception. Не 404. Кроме контроллера никто в приложении не знает, что ты работаешь с HTTP.
преобразовать дату в нужный формат
Дату преобразовывай в Carbon/DateTime в контроллере - в сервис/репозиторий должен попасть уже обьект в UTC.
увеличить количество просмотров
Увеличивай просмотры сервисом в контроллере.
получить отдельное количество лайков и дизлайков (они хранятся в одной таблице)
Получай лайки и дизлайки скоупом модели, который делает withCount под капотом.
как потом эти данные передавать во view
Во вью в данном случае тебе не нужно отдавать никаких доп. данных кроме самой Article, но если приспичило - передавай отдельными параметрами.
в виде отдельного массива
Никаких магических массивов быть не должно. Все что дальше контроллера (включительно) должно заменять непонятные массивы DTO-шками (погугли, есть готовая реализация от spatie, к примеру), потому что массивы не типизируются, непонятно какие там ключи есть, когда они могут быть, откуда этот массив пришел и так далее - dto решает эти проблемы.
Если сильно приспичит, ты можешь вынести всю вышеуказанную логику из контроллера в отдельный класс - это бывает удобно что-бы что-то по-быстрому зафиксать или симитировать чье-то действие, но это редкие кейсы.