Is there any reason not to use the Arduino IDE from the command line?
I don't think it gives you the features that the OP was hoping to get from Make. Though I'm not sure what those are, exactly...
For simplicity, let's assume that all of the source files are located in the current directory.
Also, there is a main.c file which contains the actual entry point and no further pre-processing needs to be done
Neither of which is the normal case. Source is scattered across at least three directories, and possibly many more (when core libraries, arduino libraries, and user-installed libraries are all in use.) And there is complicated pre-processing that figures out exactly which include paths to used based on simple #include statements, board type, and ... searching of those many library locations...
Here's how the suggestion looks like in detail:
The Arduino IDE creates a scratch directory and copies the core modules and libraries into that directory
That doesn't sound very efficient. It's on the order of 100 files...
The Arduino IDE performs additional preparation steps such as adding #include statements and creating the actual main.c file based on the scratch
main.c already exists. The #include statements already exist. What the pre-processing does is compute paths for the compile command ("-Ixxxx") and prototypes for user functions in the .ino files.
The Arduino IDE generates a Makefile which builds all of the source files (core, libraries, sketch) and the HEX file. The Makefile should have two targets: "compile" and "program". Those targets are linked to the buttons "verify" and "upload" in the IDE.
Bah. If you have to generate a Makfile every time you do a build, it's definitely not worth it!
[existing makefiles] have way too many config options
This is something that tends to be true of Makefiles in general. 
Why do I need this? I would like to do different builds for testing (on the host machine) as well as production (the microcontroller target).
Ah. "IOU" for Arduino. I've considered that a couple of times...
So in fact the changes you are suggesting won't even fulfill your requirement - they'll just get you closer to something that you can easily modify...
I THINK what you're trying to do could be done relatively readily just by creating a new "platform", which is documented... (see Creating Custom Boards for Board Manager - IDE 1.x - Arduino Forum ) Much more easily that going to a make-based system, anyway.
(Well, you could could have Make run the "arduino cli", but that probably doesn't do what you want.)