Two ideas come to my mind:
First, your program can behave like a boot loader. That way, it can allow to load additional code to the PSoC, and the execute under control of your program. Remember, a PSoC is not a PC with an operating system on it - it doesn't do multi-tasking. So you cannot "run two programs at the same time". They need to cooperate. Best would be to have something like an extension mechanism to be able to plug code into your main program.
Second, you can use a scripting language to have user-defineable code. This would allow access to everything which can be handled under software control. Think e.g. BASIC, Forth, Lua or even interpreted C code...
In both cases, its not rather difficult to modify the hardware configuration, since this is handled in the generated code, and there is no support for dynamic configuration.
When you do not worry that the customer has access to your sources, you can provide a library with your settings and program and give the user a clearly marked entry-point to start your program. I assume that without your code the device is useless, so the customer is willing to use your library. Probably you may link-in an object-file, but I did not (yet) care for the GCC-linker.