AFAIK a framework is the structure on which you build your applications. It differs from libraries in that it has inversion of control (i.e. in libraries, you call a subroutine from your code and so you have control; but in frameworks, you bind your subroutines to the framework and it calls your subroutine as and when needed - so the control is with the framework).
An engine is a totally different concept - it's a hybrid between a framework and a library. Like a framework, it has control over the application. However unlike a framework, you don't bind your subroutines to the engine but use its built in API to perform certain tasks (which is like a library).
In summary, a framework is the structure of the application which you can extend and tailor by binding your subroutines to it. OTOH, an engine is the main application itself which you can simply instruct to do what you want it to, using its public API.
Thus, frameworks are more flexible. However, an engine is a working application - so it gets the job done faster because the programmer doesn't need to waste time re-inventing the wheel. He can simply instruct the engine what to do and the engine will handle the internal operations.