Because you should wrapp that in a type safe function. You should not use the context.GetValue() directly but use your own function, the context is just a transport mechanism.
Context tells you enough: someone, somewhere may do magic with this if you pass it down the chain.
And in good Go tradition it's explicit about this: functions that don't take a context don't (generally) do that kind of magic.
If anything it mixes two concerns: cancelation and dynamic scoping.
But I'm not sure having two different parameters would be better.