To sort out some confusion, a game engine is basically built in command interfaces that extend a programming language.
It may make tedious tasks such as writing code to display a cube in OpenGL easy as calling a function and entering a few coordinates. In that sense they are partly what is called a "framework". You can look at it similar to scaffolding. There's already all these functions ready to go, you just need to fill in blanks.
In addition to being a framework for a graphics rendering language, they may also be a framework for a physics language as well, and tie those together. Often they tie diverse low level specifics into a single consistent high level interface.
High level in programming means abstraction. It goes from the 0's and 1's of machine code and hardware interfacing that drivers have to deal with, and gives the developers a general simplified interface that lets them write simple scripts while the appropriate framework ties it to the nitty gritty.
So the engine is still much less responsible for overall graphical quality than most believe. Its just a programming framework that doesn't even need to be followed strictly. In any case where you want to bypass the framework and write low level code that interfaces directly with graphics rendering, most engines if not all will let you do that. I can actually edit the underlying SDL functions in the LOVE framework for example, if I want to change how it takes the inputs for a line or a love. Draw. Rect() and its fine with that.
NRS seems to have done a great deal of modification to the Unreal Engine that as they stated, its essentially an entirely new engine that is not outdated and every bit as new as UE4.
Also, last note: UE3 is an awful game engine. My opinion of course.