An engine is mostly separate library (although it can be used as framework and built into every code) - it depends, do you want your engine to be a module for your game (e.g. when there is bug in it, you just fix the library), or do you want it to be part of the game project (e.g. it's a big monolith). Both has it's advantages and disadvantages and it really depends. The question is, do you want to use same version of engine in more of your projects (then DLL probably wins, although both ways can be used), or whether you want to use single engine version in single game (where either is good, maybe framework a bit better - because you manage just single project).
As for the language used for the game engine - it can be any, I mean like you can use any procedural (C, Pascal), object-oriented (C++, Object-Pascal, or higher level C#, Java), or even functional (Haskell) - e.g. you can actually use ANY usable language out there.
First of all it depends which language you know (and I mean you know well). You can go purely procedural with C - it has it's advantages, no inheritance, polymorphism, template (etc.) mess - so in the end project looks a lot simplier, on the other hand absence of these will make your code a lot longer. You can go purely OOP - but it has also it's problems, you can mix these two (this can end in either very good code, or in bloody mess) ... it's all up to you. I've been working on engine in both major - purely procedural manner and object-oriented manner - yet I can't tell which is better, both is good and both can be used well. I've never tried to write purely functional engine (in Haskell), but one day I'd like to try (but it's definitely possible).
Edited by Vilem Otte, 09 October 2012 - 07:11 AM.