It’s important to think about what you give up when everything becomes synchronous. Fundamentally, Pulumi is a DAG execution engine; your program produces a DAG of resources and Pulumi does what it needs to do to make your state DAG match the DAG you expressed in your program. If your program is synchronous, each DAG node has to be resolved serially, one at a time. This is a really terrible experience, and I can say that with confidence because Pulumi used to do this and it was awful.
Asynchrony allows a program to continue while Pulumi is chugging along on the DAG, and allows Pulumi to parallelize resource operations. It’s tempting to visualize how the programming model is improved by eliminating it, but you’re paying a massive cost to do so.