The Arduino MCU is programmed with a bootloader that is able to reprogram the MCU's internal flash memory via commands sent over the serial port (which you talk to via a USB to serial converter). When the MCU is reset, the bootloader starts, waits a bit to see if there's a PC connected that wants to send over a new program and, if not, runs the program previously programmed into the flash by the bootloader.
Basically, you want to do the same thing on the Pi, but the way the Pi boots is different.
You don't say or provide links to the tools you're currently using to program the Pi or the details of what exactly you're putting on the SD card (what partitions you create and what files you put in them), so I can't really provide any help on how you might tweak them to be able to upload via USB.
However, the general idea is going to be similar to the Ardunio in that you'll need to write a program that takes control on boot, decides whether or not to receive a new program over USB and write it, and then passes control to whatever's written. NOOBS does something very similar, coming up with a menu and eventually starting another system on another partition. The details of how it works provide a good guide to what you need to do.