Like if you look at a large engine (especially closed source ones) like Unity and then decide that you want to use your own Sound system it is very fiddly because Unity generally doesn't like the user loading in their own assets directly rather than going through their resources system. Or if you wanted to use System.Windows.Forms, Unity makes it generally impossible.
My typical setup is:
freeglut (Yes, I am a Glut lover)
libwavefront_ext (custom animation system)
tritri.c (A fast triangle-triangle intersect test by Tomas Moller)
So whilst this isn't a full engine, I can generally do anything, and it also means I can use task specific libraries / technologies when I need to (like ode physics, android NDK, OpenCL etc...)
If a platform doesn't support one of the above libraries, it is pretty trivial to just swap it out (using ifdefs). So I find this solution to be the most portable.
I see engines as being of two types: hobby engines that were designed to be more like game-making 'kits', a stand-alone product whose developer's sole intention is to maximize profits by creating something that appeals to a greater audience of people that just want to make games (non-coders) without knowing anything...Yes this is the latest trend to turn would be developers into consumers. I feel that a lot of people are missing out on useful experience and education by misusing tools like Unity without really knowing what is happening. (Using it more like Microsoft Office than a development tool).
I occasionally do some programming lectures at university and was shocked when the students were starting to learn Unity for one of their units!
Nowerdays the students from UNIX system programming units can make better (portable) games than those on Entertainment Media (Games) Development courses.