OpenCL program object is the container for all the kernel functions that the user want to compile.
I am developing with a single context. Do you think it is necessary in any way to give provision to create several program objects on single context ?
Have you ever encountered any scenario where you need to create several program object on a single context?
There are no hard and fast rules for creating more than 1 program object... It is just a matter of convenience.
Once the kernel objects are created, it really does not matter which program object it came from... You can just set the args and fire up the kernels...
If you are using many 3rd party OpenCL libraries, then each one might create its own program on a user-supplied context....
As I said before, it is just a matter of convenience...There is no need to look at this so hard. There is nothing there.. It is an "upto the programmer and the application" thing...