Regarding a tool which can store monitor configuration profiles on a per-user and per-display basis, autorandr will do exactly that. https://github.com/wertarbyte/autorandr.
My laptop has an NVIDIA card, so I use the disper backend instead of xrandr: http://willem.engen.nl/projects/disper/. Autorandr will use disper as the backend to manage your monitors if you call it as
autodisper. For the rest of this post though, I'll refer to it as
autorandr for consistency.
You can save profiles with
autorandr --save profile_name. Running
autorandr by itself will then give you a list of profiles, and identify which one is detected as the current configuration.
You can tell it to automatically load the appropriate profile for the current configuration with
autorandr --change. This command, paired with a udev rule to run it when it is hotplugged, would do what you requested.
As an added precaution I've appended
--default laptop to that command, which will make it default to the laptop's display if there is no saved profile that matches the current configuration. So the full command I use to switch displays is:
autorandr --change --default laptop
Unfortunately my machine doesn't give any udev output when I hotplug my monitor. I'm using the NVIDIA proprietary drivers, so that isn't surprising. So I have bound it to the XF68Display key (Fn-F8) for now, which is almost as good.