It sounds like you want to prevent users from poking around the internals of the project, and possibly simplify their use of it. There are best practices on this. I would point you to obfuscation, and merge tools.
Obfuscation: .NET obfuscation tools/strategy
Merging: Best practices for merging assemblies?
When you Obfuscate your code, it will be very difficult to de-compile it. As the previous article mentions with 3.5 it is not as much of an issue as it used to be. This will help if you want to keep those that are very technically inclined out.
When you merge the assemblies, all the DLL's and EXE's you see will become one EXE. This is good because it will be clear on what they need to run, but at the same not give them too much information on the internal workings. This is something that I don't generally worry about with my end users, but I am sure you have your reasons.