Некоторые списания будут реализованы по схеме, когда пользователь запрашивает его, а некий модератор спустя время подтверждает.
Т.е. сначала просто блокировка средств на счету. Добавьте это поле и всё будет просто.
Нужно ли хранить входящий/исходящий баланс в истории транзакций?
Это удобно, но и без них многие работают.
С другой стороны, как быть с неподтверждёнными транзакциями.
Если вы позволяете использовать средства до подтверждения, то зачислять как обычно, а в случае неподтверждения добавлять отменяющую транзакцию. Если нет — транзакция происходит только в момент подтверждения платежа; платеж и транзакция по изменению баланса — разные сущности.