Re-program the Arduino Uno without losing a base (custom firmware) sketch

You don't have to squeeze the boot loader into 2k - you can have the whole memory as boot loader, but you need to make sure then that the code you load isn't allowed to write to flash memory, otherwise the base code could be overwritten.