Is it possible to set an environment variable for a user, not just a shell?

launchctl setenv key value

To make this take effect at login automatically, create a launch agent to execute this at RunAtLoad.