Placing data-defined labels both by expression and manually

The most effective workaround I've found (EDIT: not anymore; see the "default value" method for a fully functional solution) uses rule-based labeling.

First, it's necessary to populate all the X/Y fields with the labels' current (i.e., default) position, using x($geometry) and y($geometry). Then, create a rule where "X" is not null and define its override placement using the X and Y fields.

For the second rule, the ELSE case, define the override placement using the expression:

if("UsePOS",
   x(point_on_surface($geometry)),
   "X"
   )

To use this placement, you would check "UsePOS" and unpin the label (thus deleting its X and Y values). An imperfection arises if you again wish to move this label manually, as that will once again invoke auxiliary storage (which, if you allow it, will then re-define all your labels' placement to the auxiliary fields), and you cannot use the Pin/Unpin tool to re-set its X/Y values, so you'll have to manually populate those again.