If you're right, then there isn't much value in abstracting over repetitive patterns. I'd say that is pretty decisively contradicted by the history of software. Why have functions at all then?
Because it saves space and because it makes maintenance easier, and it allows you to label a block of code with a meaningful name.
Caching also means that if you execute less code you will have better performance.
The actual instructions can be interpreted serially, in fact when you're 'desk checking' that is exactly what you do, to unwind the way the code is written to the serial stream that the processor is executing.