In Erlang, we have a similar concept to the Context bag called the Process Dictionary. Its use is generally a nono because it breaks the rules for functional programming and allows you to have a shared space. We like to pass every argument explicitly in order to make it easier to read the code.
Yet, we've found again and again that there are situations where the value of the process dictionary outweighs functional programming. Among those are RNG state and process metadata, of which TraceIDs would be a prime example. Processes crashing list their PD as well.
A rule of thumb we often use is that the things you stuff in the PD must not be something which directly affects your programs behavior, though the RNG is a borderline case. I'd also be somewhat worried if the omission of a TraceID would ever affect a system. It ought to handle a nil return when calling span.FromContext() gracefully I think. It would be akin to most of the system I write: when a message does distributive transfer, you encode and marshal its meta-data on where relevant. The structure of the meta-data is given by convention, not by explicit notion.
In short: you have to balance convenience against correctness. I think Jaana's proposal manages to do just that, in particular by acknowledging this is likely to need future extension.