Why is surface location not part of Wayland protocol?
Individual clients don't have permissions to become window managers and arbitrarily position windows on-screen. Positioning of windows is compositor policy, and (frequently) up to the user.
The main rationale here is that arbitrary programs shouldn't be able to control the layout of the entire desktop session.
What would be the suggested way or ways for controlling Wayland surface placement programmatically?
Different solutions are being discussed for different use cases, but it's hard to provide an exact solution without knowing what you're trying to do.
If you're writing a program that arranges the position of windows on-screen, then the wlr_foreign_toplevel_management_unstable_v1 protocol extension might be what you're looking for. At this time, it is mostly supported by wlroots compositors, it is not fully standardised and not supported by GNOME.
If you're writing a program with multiple windows where you want them in specific relative positions to one another, then the ext-zones-v1 protocol extension will be of interest to you. I say "will be" because it's not standardised yet, so you can't really use it.
If you're writing a statusbar that must be positioned on the left border, or want a bar on the right hand side with some custom content, you want to use the wlr-layer-shell-unstable-v1 protocol. At this time, it is only supported by wlroots and KDE compositors. It is in the process of being standardised as ext-layer-shell.
Some compositors provide a custom API to implement custom window managers and similar program which control window positions and desktop layout.