I wouldn't recommend synthesizing such construct using procedures because it would be much less optimal with the added stack frames. Elegance is nice but not at the cost of less optimal code.
You're right in that there is an added stack frame in that case but, the loss of performance is negligible and, only perceptible if the procedure is executed extremely often.
I consider code simplicity and maintainability much more important than performance. I only pay attention to performance when it gets in the way of usability, i.e, jerky or "elastic" user interface and that kind of thing. (The Windows API DrawText, used by Listview controls and wsprintf in user32 are in that category, their performance is dismal.)
ETA:It's quite likely that such a procedure could be inlined thus eliminating the stack frame and performance considerations. I haven't tried it but, it seems quite reasonable.