Indeed, your and my assumptions diverge when it comes to the above point 1. 
Specifically, I’m assuming that the basic type creation signature would support only named-fields style format strings (i.e., with field expressions being valid Python identifiers ). The constructor, apart from the format string, would accept a namespace (represented as a mapping object, given as a positional argument, and/or some number of keyword arguments – combined in a similar vein to the dict() constructor or, preferrably, ChainMap-like behavior ), which would be required to contain all field names included by the format string.
The expr field on the interpolations would be populated just with the respective field names – making the resultant Template instance equivalent (and equal in terms of ==) to a one created using a similar t-string containing replacement fields in which variables of respective names and values would have been used.
E.g., these two ways to create a Template object would be perfectly equivalent:
t1 = Template(
"Score for {title!r} is {score:.2%f}.",
title="Monty Python's Life of Brian",
score=0.96)
t2 = (lambda title, score:
t"Score for {title!r} is {score:.2%f}.")(
title="Monty Python's Life of Brian",
score=0.96)
As I wrote in a comment to the related issue in the PEP repo:
I deliberately suggest to resign from accepting field values passed as consecutive str.format()-like positional arguments (or as items of a string.Formatter.vformat()-like sequence argument). After all, f-strings do not support any argument sequences.
OK, strictly speaking, f-strings do not support keyword arguments either; but they do support getting items from namespaces – by using variables as f-string’s replacement field expressions; and I would argue that, in some sense, this is the basic way of using f-strings. And the use of a namespace here (expressed as a mapping and/or keyword arguments) is closely related to that basic way.
I’d also argue that namespace/mapping-based approach is much more flexible in terms of combining/adjusting/customizing field values – especially if one needs to specify them incrementally/in different places/at different stages of processing, but still in a cooperative way.
PS [EDIT] When it comes to my gut feelings regarding future enhancements, especially those related to “true templating” (I agree that, at the moment, any concrete proposals beyond the available building blocks would be premature), I’d have greater hopes in exploring functools.partial()-based and factory-maker-like approaches, rather than in introducing new Template-like types… But, obviously, I do not rule them out. 
PPS [EDIT] When it comes to the other points (2., 3., 4.) in the latest post by @ncoghlan, my assumptions are generally consistent with them.