"Recursive make" is a common makefile coding pattern which is used to invoke another session of make. Since a session of make only read in one top-level makefile, this is an easy and natural way to build makefiles for projects made of several submodules.
But this pattern causes a lot of problems mainly that you need to partition the dependency tree into several smaller trees. This prevents dependencies from being expressed correctly between instances. This also causes parts of the dependency tree to be calculated multiple times which makes performance suffer. This and many other problems related to recursive make are explained very well in a classic article called Recursive Make Considered Harmful.
With Make it's easy for the user that wants to compile a project to do so. All that they need to do is run make and GNU Make will take care of the rest without the user even needing to know what's happening.
GNU Make is not limited to making packages only. It can also be used to install or remove a package, generate tags for it or anything else that can and should be done programmatically.