Почему так странно работает findOrFail()?
$this->renderable(function (NotFoundHttpException $e, $request) {
    if ($request->is('users/*')) {
        return response()->json([
            'message' => 'Юзер не найден'
        ], 404);
    }
});
В общем, благодаря дискуссии в каментах с коллегой jazzus я пришел к выводу, что приемлемого решения этого вопроса на данный момент не существует.

Можно конечно отлавливать исключение ModelNotFoundException в месте вызова при помощи try-catch:

try {
            $user = User::findOrFail($id);
        } catch (ModelNotFoundException $e) {
            return response()->json(['model' => $e->getModel()], 404);
        }

но это такое себе...