Guix and Nix can do that. They were built from the ground up to be able to have multiple, simultaneous versions of everything installed in separate store, and you can request on a per shell basis what you want in your environment.
I really like fish shell. After ditching bash and picking up ksh for its much nicer array notation, I needed a frontend shell, and it really fits the bill. Its defaults are really friendly, and it is very configurable.