Now I mostly use Serial.print(F()) to put the strings in EEPROM, but I don't think that reduces the compile size.
Of course it doesn't. It actually increases it, as you've now said that constant strings should live in program (code) space, rather than SRAM.
Including libraries that are not actually used by the code doesn't seem to affect it.
Correct. AWOL alludes to why. The linker only writes to the hex file code that actually does stuff - after optimization occurs.
Defining variable don't seem to affect it, which is surprising.
Not if you understand where variables are stored. Program space is read only, unless the bootloader is uploading a new hex file. Since variables need to be written to, they are not stored in program space. So, they do not affect the amount of program space needed.