P-coded files are encrypted, but as all encrypted data, which should be used, there is a method for decryption. The encryption method is not made public as well as the key. Either all P-files have the same key, which is stored in the Matlab application, or the keys must be included in the P-file.
If you use any other method for encryption, you have to use an equivalent approach: You need an decryption function and a key on the users machine. During the usage, the code must be decrpyted. In consequence all methods for working with encrypted data on the user's computer is "obfuscation" only.
This is not a problem of Matlab, but the need to "encrypt code for deployment" leads to the same problem in any programmibng language.
If a code is large (1e5 lines of code) and does not contain comments or meaningful names for variables, it is extremely obfuscated also. You simply cannot use or understand parts of it without investing more time (==money), that it is cheaper to develop the code again.
I'm using this approach for projects: 99% of the code is provided as M-code. The main routines are P-coded and check the validity of the license, which is partially done in a Mex file. Inside the P-coded functions, some simple checks detect if the debugger is active.