Now I'm lost, because we seem to be talking about two completely different concepts. I do understand what the difference between hi-res mode for 3D (in layman terms - less jaggies, possibly filters or fancy shaders) and 2D is (stretching, possibly linear filtering and/or scalers like eagle2x), and I am and was talking about the second one only.
Now, let's forget about "Enhanced resolution" switch from the built-in GPU plugin settings for the time being. [Display] menu has five options:
"Scaler", which governs how the image is stretched: 1x1, 4:3, 4:3 with integer scaling and custom. Note that it's not what in the 2D emulation world is called "scalers", these are called "Software Filter" here, which may be one cause of misunderstanding.
"Hardware Filter" - linear filtering.
"Software Filter" - fancy 2D scalers (sic), Scale2x and Eagle2x.
"Gamma" - gamma.
"Custom..." - custom absolute stretching.
What I want, is a "Scaler" option 2x2 which doubles the pixels for resolutions which can be doubled while remaining at 1x1 for native hi-res (which wouldn't fit on the screen if it were doubled). 4:3 and 4:3 integer scaling unfortunately deform pixels, because the original resolutions are not 4:3 and you definitely cannot change aspect ratio for a 2D image without some kind of visual losses. Enabling linear filtering makes up for it, but I don't want linear filtering in my nice sprite-based games.
I can make it work already with custom stretching, but it doesn't work relatively, I can only set a target resolution, not how to multiply the pixels. For example, if a game has screens in 256x240 and I set it to 512x480 - I get what I want, but then the game switches to 320x240 and that resolution is also stretched to 512x480, which is not pixel perfect anymore.
Ok, now, let's get back to the "Enhanced resolution" option in the built-in GPU settings: it does what I want - if the game is in 256x240, it's automatically doubled to 512x480 without losses. When the game switches to 320x240 - it switches to 640x480. When it's in native hi-res - it does nothing. However, for some weird reason, it doesn't work when an MDEC video is playing, it remains at 320x240 then.
Phew, that's about it. I hope I explained it this time.