You can try something like:
$invoicesCollection = Invoice ::orderBy(\DB::raw('if(curdate() > date(billed_through_date), 1, 0)'))
->orderBy('was_invoice_sent')
->orderBy('billed_through_date')
The first statement will check if the billed_through_date date is less then current date, assign 1 if yes and 0 if no. After sorting (asc by default) all records with the date lesss then current date will be at the end of result.
If you need to check by datetime (not by date part only), need to little change the query
$invoicesCollection = Invoice ::orderBy(\DB::raw('billed_through_date > now(), 1, 0)'))
->orderBy('was_invoice_sent')
->orderBy('billed_through_date')
this time all records prior to current time will be at the end.