I am concerned just now about the semantics of eval and the attendant status of the environment-specifier as used in the definition of eval in R5RS. I note that R5RS does not require that eval mutate its second argument although it is permitted to. R5RS does not require that the environment returned by the primitive procedures be mutable. I think it requires that mutable such environments be new. Such primitives in MzScheme seem to return new mutable environments.
Another note with more points of view recorded.
Larceny supports first class environments.
Gauche claims to support read-eval-print loops directly.
Delorie connects eval with modules. I don't want to go there.