As Whisper Wind has said, there is a huge difference in writing a DirectX or OpenGL based graphics engine to writing a software based graphics engine.
If you are doing this just for educational purposes then probably you should be thinking about a software based engine, one where you do everything yourself, otherwise, you're just learning an API not the fundamentals of 3D programming. Sure, you'll get better results faster but in the long run you are better off knowing what is going on (or at least having a good idea) under the hood.
You will learn loads by doing it as nothing is abstracted from you, you will see it all for what it is, and I can tell you that its a fascinating journey.
However, the feature list you gave was pretty advanced, to say the least, and would probably not be worth the effort for a software based engine as even if you did it all perfectly, using C++ and ASM it would still be slow and not even compare to some simple DX based effort that took half a day.
You have to remember that doing it all yourself, in software, you have to go back to the early days of 3D and follow what the pioneers did.
You will have the advantage of a much faster PC with tons more memory but even doing something as "basic" as perspective correct texture mapping is very hard, and fraught with optimisation problems that need to be overcome. It took the experts years to get it right, and when they did, they committed the routines to the hardware Graphics cards we use today.
On my website you can find some demos of stuff I've made with a DX based engine (The engine is written to the DX API) and 3 sofware renderers, one in Javascript(!!), one in C# and one in Java. In all cases the engine was designed as a wireframe renderer although I added dynamic lighting and filled polygons later on.
In my case, I stumbled when it came to implementing a proper ZBuffer (I used the painters algorithm), a scanline renderer & texture mapper. Although I know the effort that went in, it still looks like cr@p compared to any DX program, although it boasts its own file format, scene managements and collision detection / response.
Although its hard, time consuming, and even if it goes well, will look like cr@p compared to anything remotely contemprary, if you want to learn 3D programming, then I couldn't recommend it enough! I would even go as far as to say its an essential excercise, as DX abstracts so much away its easy to "lose track" of what its doing for you, so you'll end up with no idea how to optimise, or how to achive certain things.
My advice, if you really want to learn this, would be to start off by writing a wireframe engine, and see where you go from there.
There's a brilliant tutorial around from a chap called Simon Brown that provides an excellent introduction to this, and its wriiten in a very easy style for those who are just starting out.
http://www.sbdev.pwp.blueyonder.co.uk/intro.htm
Have a go, its good fun, like he says on his site..
Quote: "What do you need to know
You need to know the basics of whatever programming language you use, and how to plot pixels (preferably quickly) within your chosen environment."
THAT'S the empowerment, right there.
From just being able to plot pixels (or draw lines in the case of wireframe) you can write 3D programs!
Hurrah!