The principle way a bootloader works includes some checks at a very early stage:
1st. Is a device present from which a bootloadable can be downloaded?
2nd Is the bootloadable a different version than the current?
When both questions are answered with "yes" the bootload-process can start.
Cypress's Bootloaders are organized in a way so that you may integrate any communication interface for the bootloading process, have a look at an example here:http://www.cypress.com/?rID=50230
So using USB for bootloading will work. you may search as well in the "Keyword Search" at the top of this page for "bootloader usb" and go through the references found.
You are correct in saying that once the bootlaoder ends, PSoC will undergo a reset to start application code. When you look at it from USB host perspective, host will see the disconnect of HID bootloader device and then it will recognise a different device as per your application.
From the PC application perspective, you will need to write application for two devices: one would be the bootlaoder and the other would be the bootloadable. If you ask me, I will disable the 'wait for command' checkbox in bootloader so that at the power up and in normal conditions, the bootloader will not enumerate at all and the first device that the host will see will be the device as you define in your application.
When you want to bootload, you could implement a vendor command in your application USB device to start bootloader operation by calling Bootloadable_Load API. AN56377 - PSoC® 3 and PSoC 5 USB Transfer Types has a good example of implementation of vendor commands with PSoC. Once the vendor command is sent out, PC application can start looking for detection of bootloader HID device and once bootloading is finished, it can start looking for application USB device.