Changing Bootloader settings using HEX file in atmega328P
This bit isn't quite clear:

Can I change the fuse settings and upload the code both from one .hex file directly ? Even if the fuse settings are different (different clock)?

You can use an AVR fuse calculator to work out what fuses to set and then use Avrdude (or Avrdudess for a GUI version) to set them. I would just overwrite the bootloader and upload using a programmer.
Not really sure if this answers your question but I am not quite clear on what you are trying to ask. If you fix the question I might be able to help a bit more.
EDIT:
You can set the fuse settings to the chip, then upload a hex file using a programmer like AVR ISP or USBASP if you want to avoid the bootloader. I'm pretty sure when you upload the hex file, it will not and can not do anything to the fuse settings, so do the fuses first. Also, you can upload your code straight from the Arduino IDE using a programmer by holding the shift key down during upload. However you can not set the fuse settings with it so better to just use avrdude or a GUI for it.