As I've said before, if you plan to write a game, don't write an engine. There are lots of good engines out there, most of 'em relatively cheap.
If you're working on a platform for which there's currently no decent middleware available, then you might be able to build a case for it. If, though, you're writing an engine for a well-established platform, it's most likely a waste of time and was started based on bad advice from books or colleagues.
If you're currently working on your engine, you should probably abandon it, and the sooner the better.
You'll thank me later.
Discuss.
I have spent time on frameworks, which is about the same thing as an engine. I've spent I don't know how much time making OO wrappers for SDL.
This is why I now prefer environments like Flash and C#. When I redid cowhead, I was able to get menuing, a status bar, a magically resizing and automatically scrolling gameplay area FROM THE PLATFORM WITH NO PROGRAMMING EFFORT. I was then able to simply work on the game code itself, and use designer type tools for making menus and buttons and stuff.
In flash, I admit that I did make a button class. Once. I then reused it in all of my applications since then. Yes, flash had a button thing already existing, and so I didn't need to do this. But I *DIDN'T* completely make my own framework/wrapper/engine from the ground up. Everything was based on MovieClips, which meant no rendering code AT ALL.