Here is a summary of how things are/will be soon, unless some kind of UX simplification happens:
Property substitution: uses the str.format() convention. Everywhere something like {propname} shows up, it's replaced with the corresponding property's value (from the current layer if any, or global otherwise). Supports things like {propname:.5f} and the rest of the str.format() mini-language.
Examples:
$ vpype read input.svg [...] write {vp_filename}_processed.svg
$ vpype [...] text "pen width: {vp_pen_width:.2f}" [...]