Agreed. Dynamic targets and generators are not just trivial with GNU Make but there are *multiple* trivial ways to do them (makefile fragments and include and $(eval ...), and heck in the latest unreleased version a built-in Guile interpreter!). Equally, automatic dependency generation (assuming that's what you mean by 'autodependency resolution') is trivially done assuming only that you have something that knows what those dependencies are (and virtually all compilers and the like can these days spit out dependency graphs in GNU Make notation). As for out-of-tree builds, VPATH is decades old, where have you been?
There *are* problems in GNU Make still -- it needs a proper macro system to reduce the verbosity of endlessly re-specified obvious paths in non-recursive make fragments, for example: you can automatically throw your makefiles through M4 or something but that is very ugly because it introduces too much additional notation -- but they never seem to be the problems the condemners of make complain about.
I suspect the real problem here is that most of the tricks you need in order to do anything powerful with make are not well known, even though most of them are not very complicated. (Here, I cannot recommend John Graham-Cumming's _Gnu Make Unleashed_ highly enough. Also, RTFM for GNU Make every ten years or so, or at least the NEWS for the versions you haven't noticed get released. It's gained some very powerful facilities over the last decade or so...)