D* is quite involved -- I don't recommend trying to implement it. Even when projects that are well funded, and being developed by smart/experienced people, D* lite is used, because D* is such a pain to get right.
You may be interested in this presentation, which includes discussion of Left 4 Dead's pathfinding:
One approach is to use a coarse level A* search to get a general path for an agent, and then to do a fine detail level A* search for an agent's local environment. This way, you can quickly recompute the course detail A* search if the terrain changes, and then quickly recompute the fine detail A* search for a small segment of the environment. This is not perfect. It works as long as your obstacles cannot block out multiple course detail graph nodes, which is fine for most games. This is the method I recommend if you have less than 100 agents.
If you want to support hundreds, or thousands of agents, then you can implement something like continuum crowds. See this research:
That discusses a purely CPU based method that can support thousands of actors in a dynamic environment.
If you want to support tens of thousands, or hundreds of thousands of agents, then you can implement something like continuum crowds, with GPU assistance.
See here for the relevant research:
Here is a video demonstrating continuum crowds in action:
(Skip to 4:10 to see large dynamic obstacles like cars and stoplights affecting hundreds of people walking around a city.)