How does an industry practising lean methods prioritise both deferring decisions until the full set of facts are established, and simultaneously rapidly delivering software?
It's not a contradiction
Let's get one thing straight here. No matter how much the decisions are deferred, no matter how quickly the project gets delivered, one thing always remains true:
Project requirements, and the design designed that come from them, are always established before the project can be delivered.
Because without those requirements you can't make design decisions, and without those decisions you don't have a product to actually deliver, nor any requirements to deliver it for.
This may seem tautological and quite obvious, but it also points out the flaw in your argument, or rather the absence of an inherent contradiction between deferring design decisions and shortening delivery time.
No customer can have an expectation of product delivery before they've finalized the requirements for that delivery. Before a customer can even formulate a concrete expectation of delivery, they must first provide the requirements for the deliverable product.
The developer's job is to translate those requirement into the intended product. Design decisions specifically happen during that time, as your design is the translation of the requirements into the concrete product.
Deferring decisions
Not making design decisions too early is done to minimize the amount of effort spent on the project (assuming an equal end product for comparison).
When the customer changes their mind on a requirement, only their last choice really matters. So the effort spent on building the previous requirement that has now been changed, is effectively wasted (either partially or fully).
Think of it like this: you are ordering food in a restaurant, you're talking to the waiter, but the chef can overhear you ordering.
I think I'm going to have the salmon lasagna. But then again, the steak tartare sounds very nice as well, that might be a better choice. Oh wait, you serve lobster? I hadn't even seen that. I'll have the lobster please.
If that chef was eager and started making a dish the second you mentioned it, instead of waiting until the order was finished (i.e. the waiter walks away from your table), then the chef will have started a salmon lasagna, then a steak tartare, and then a lobster. The salmon lasagna and the steak tartare would've been wasted, since you no longer want these things.
By deferring the decision, you minimize the effort you wasted on requirements that don't end up in the final specification.
You could argue that the customer should've only ordered what they ended up wanting, but that's not good customer service, customers don't like being told what to do, and even if they thought they knew what they wanted, they may have forgotten things, misspoken, or they ended up making new decisions when they received new information that they did not initially have when making the initial order.
You could argue that starting early still helped you deliver more quickly, because parts of the old requirement can be reused for the new requirement, saving some time compared to having to build the new requirement from scratch. While that is certainly possible, it is a gamble, as you cannot guess what a future requirement might be when you only have the old requirement to go on.
Just because something ended up working out does not mean that it was a wise decision to begin with. Building things on the off chance you might need them is gambling. Doesn't mean you can't luck into guessing the correct outcome, but doesn't make it a wise decision either.
Speeding up delivery
The faster you can deliver something, the better. I don't think I need to elaborate on that.
But I do want to point out here that deferring your design decisions may actually help with shortening the delivery time.
We addressed the food that was wasted when the chef started making the lasagna and the steak tartare. But another thing to consider is that the kitchen staff now also has to clean up these wasted dishes, i.e. wash the lasagna pan, clean the steak knife, ... which negatively impacts their ability to deliver that lobster meal quickly.
In programming terms, having to rollback implementations that are no longer valid also takes effort, and more effort means more time needed to deliver. When a customer changes their mind on a specific feature, that specific feature must be rolled back and its replacement needs to be developed. But this can trigger an entire chain of refactoring in and of itself, if that feature led to a design decision that is now no longer valid now that the feature itself has been scrapped.
Is this refactoring chain a common occurrence? That depends on the size of the changes made to the requirement, and the cleanliness of your codebase. For small changes and/or clean codebases, the impact is usually minimized. For large changes and/or dirty codebases, the impact is usually more significant.