Create a middleware as suggested by Alexander Lichter that sets the Accept header on every request:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class ForceJsonResponse
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        $request->headers->set('Accept', 'application/json');
        return $next($request);
    }
}
Add it to $routeMiddleware in the app/Http/Kernel.php file:
protected $routeMiddleware = [
    (...)
    'json.response' => \App\Http\Middleware\ForceJsonResponse::class,
];
You can now wrap all routes that should return JSON:
Route::group(['middleware' => ['json.response']], function () { ... });
Edit: For Laravel 6.9+
Give the json.response middleware priority over other middlewares - to handle cases where the request is terminated by other middlewares (such as the Authorize middleware) before you get to set the Accept header.
To do this - override the constructor of you App\Http\Kernel class (app/Http/Kernel.php) with:
    public function __construct( Application $app, Router $router ) {
        parent::__construct( $app, $router );
        $this->prependToMiddlewarePriority(\App\Http\Middleware\ForceJsonResponse::class);
    }