Нам надо проверять не блок, а транзакцию.
Чтобы проверить транзакцию, надо проверить все "входы". Каждый "вход" должен быть связан с "выходом" действительной прошлой транзакции. В данном случае, действительная транзакция это транзакция включённая в
действительный блок. Вот здесь -то и требуетя проверка всех блоков. Кроме того, чтобы проверить неподтверждённую транзакцию (которая ещё не включена в блок) надо убедиться, что её "входы" ещё не были использованы в прошлых транзакциях, для чего нужна база всех транзакций или база всех непотраченных выходов.
А почему нельзя проверять с хвоста к началу до последнего блока с чекпоинтом?
Думаю, можно. Полная база нужна, в основном, для проверки неподтверждённых транзакций.