TR; DL: I misunderstood RouterModule. forChild() provides services that should not be provided by forRoot(). So forChild() can't be replaced by RouterModule.
Misunderstanding
After I read the source code of RouterModule, I realized that I had misunderstood.
RouterModule has only declarations(components, directives, pipes) and all services are provided from forRoot(). Then forChild() will be perfect subset of forRoot().
As a diagram:

So I was been wondering if only forRoot provides services and neither forChild() and RouterModule does not, then what's the difference between forChild() and RouterModule.
But I was wrong.
Correction
Unlike what I thought, forChild() was also providing services which should not be provided by forRoot(). One of the services provided by forChild() is user-defined routes, which should obviously have each instances.
And the correct diagarm looks like this:

I misunderstood because I've never seen services that should be provided multiple time, which its singleton could be destroyed.
Conclusion
There is a reason why forChild() is made separately.. forChild() is not a subset of forRoot(), and is clearly different with RouterModule itself.