For question 2, you already found the solution.
Now, to answer the first question you need to know that neither the hex nor the bin are used in System Workbench to program (burn) the application.
In fact internally System Workbench - as it is gcc based - uses gdb and openocd to program and debug your application.
Thus means that :
- System Workbench passes the elf file to gdb
- gdb reads the debug informations to grants code comprehension
and extracts the loadable sections (same as in the bin file)
then passes these sections to openocd to burn them.
To conclude, the elf does not contains only the burnable image but others information (such as debug info).
And only the loadable sections are programmed, which is equivalent to program the bin, or hex file.
TIP : even the bin, and hex files have different sizes because the content is represented in different ways (+ hex contains adresses, but the bin does not)