> I think the answer is yes (with one reservation). Here is an example:
>
> In[1]:=
> f[x_]:=x^2;
>
> In[2]:=
> SetAttributes[f,{Locked,Protected,ReadProtected}]
>
> In[3]:=
> DumpSave["f.mx",f];
>
> Now quite the kernel and read in the file "f.mx".
>
> In[1]:=
> << "f.mx"
>
> In[2]:=
> f[2]
>
> Out[2]=
> 4
>
> In[3]:=
> ?f
>
> Global`f
>
> Attributes[f] = {Locked, Protected, ReadProtected}
>
> Opening the file f.mx also does not reveal any information about f.
> The only problem is that the file f.mx is not portable to a different
> platform.
Instead of using a binary dump you could use Encode[] to encode the
package-file. Then you can use the regular Get or Needs-constructs to load
the package. Encode should generate to a portable package which is still
not readable. I am not sure whether that is still true, but I remember that
for at least version 4 encoded packages were portable between Linux and
Windows when encoded in Linux, but not when encoded in Windows. I don't
know about Macs and other Unices for sure, but that's something that the
support at Wolfram's should be able to answer if it is a matter for you.
hth,
albert