SPIR is designed for this http://www.khronos.org/registry/spir/
At least AMD cards support it. But you cannot use that in general right now.
Right now there is really no other way than just providing the kernels as text with your program if you want to distribute it generally to consumers. I wouldn't worry too much about the kernels being visible. Without the OpenCL API calls and documentation they are simply useless. It takes more time for someone to reverse-engineer them than to do the same from scratch. It's like OpenGL shaders in games which also are in raw text format.