How did Taproot increase the expressiveness of Bitcoin Script without changing the VM?

Wait 5 sec.

Taproot is often described as making Bitcoin “more programmable”.However, Bitcoin still executes the same stack-based Script VM, without loops or persistent state.Taproot increased expressiveness without changing the VM. What specific protocol changes made this possible?