That tech demo uses deferred rendering, it might be hard to get exactly that quality but it is perfectly possible to write a deferred renderer for DirectX9.
The idea behind deferred rendering is that you trade video memory for speed of calculating lighting. You create multiple render targets (using MRT) one for the lighting, one for the diffuse + specular intensity, one for the normals + specular power. Light calculations needed for adding a new light are performed on the data from the render targets (mainly from normals and depth data in there) so drawing an extra light means you don't have to draw the geometry an extra time. This way a scene with a dozen or even a hundreds of lights is possible, as opposite to a normal forward renderer where you have to draw all the geometry for each light, which quickly becomes costly.
Unfortunately computing shadows is still expensive but good designers have noticed that it's not necessary at all for all lights to cast a shadow to get a realistic scene.
An excellent example of this technique is the game S.T.A.L.K.E.R, and lucky for you they did a few articles on their implementation of the technique which are available for free at nVidia's developer pages.
Another similar technique is called light pre-pass of which some excellent slides by Wolfgang Engel are available here
Now as for some tutorials to point you at, I don't know of any specific C++/DirectX 9 one's, but to show it's possible this is a tutorial for deferred rendering in XNA, which uses only techniques available in DirectX 9 (XNA can't do any DirectX 10+ stuff since it has to run on the Xbox 360 as well)