В каких случаях нужно наследовать Controller?
Я периодически создаю классы, которые и не модели и не контроллеры - т.е. они просто содержат в себе всякие функции-утилиты.
Вы создаете сервисные классы.А что я вообще получаю от класса Controller в своих контроллерах? 
Работу с запросами и ответами, сессии, куки и т.пНапример, инъекция зависимостей в функцию - это от него?
Нет, это по всему ларавел приложению работает. Можете определить свой класс и использовать DI там.Как понять где он мне нужен а где нет?
Если ваш класс не содержит работу с запросами и ответами, то нет смысла наследоваться от Controller.
Можете залезть во внутренности базового класса контроллера, посмотреть, что он содержит. Лишним не будет.
Если ты не понимаешь зачем это нужно, с великой долей вероятности этого делать не надо :)
Контроллер умеет регистрировать посредников (Middleware), валидировать данные, авторизовывать действия и много чего еще. 
В твоей ситуации это, судя по всему, не нужно в классе (он будет самодостаточным)