Как в ларавель 5.5 заставить mysql обрабатывать запросы по очереди?
Открываете транзакцию, вытаскиваете юзера с локом ->lockForUpdate(), проводите свои манипуляции/проверки, сейвите, комиттите транзакцию.DB::transaction(function () use (&$user) {
    $user = User::whereKey($user->getKey())->lockForUpdate()->firstOrFail();
    if ($user->balance) // blabla
    $user->balance -= 100;
    $user->save();
});
Ничего более не нужно.
И решается это ... барабанная дробь ... очередями! Rabbitmq, Kafka  и другими вариантами. Кстати, Хранить баланс прямо в пользователе - плохая идея. 
А если хорошо подумать то надо читать про идемпотентные операции и не снимать деньги со счета, а создавать изначально транзакцию и ее закрывать, Ама фоне, асинхронно, пересчитывать баланс