Suppose for a moment that the scope of eval was truly an environment:
And you don't supply the resulting environment with anything but the functions you want.
Not even the dot operator, let alone magic builtins.
Python's eval suddenly becomes much safer. Unfortunately such an eval is harder to implement in Python, because every object carries it's magic methods with it, rather than looking them up elsewhere.
* Racket [0], sometimes used when you don't want to use Racket's way of designing DSLs, or if you want to interface to databases simpler.
* Scheme [1], used when designing DSLs, interacting with databases. You often see it go hand-in-hand with X-Expressions.
* Lua [2] can, but it is rarely used.
Note, the link for Lua actually lists a whole host of languages where this can be technically done, but not all are entirely safe.
I think it's uncommonality is not because of it's inconvenience or rarity, but rather the mantra of 'eval is evil' in the programming community, even when it doesn't apply.
[0] https://docs.racket-lang.org/guide/eval.html
[1] https://www.gnu.org/software/guile/manual/html_node/Environm...
[2] https://rosettacode.org/wiki/Runtime_evaluation/In_an_enviro...
To the second part of your question: as you have undoubtedly noticed, you've never heard of E nor Monte.