Reverse engineer is a lot of work, but always possible.
tools may be able to produce c code (or maybe other languages; but that is c-code a compiler can deal with. Not necessarily a human.
Tools may be specialized for the binaries produced by certain compilers.
Those tools may recognize individual functions from libraries.
I do not know for which compilers/languages this is available.
One think that comes to mind about pascal:
RTTI => if you use a form, or any TComponent, then it produces RTTI => that means all the names of your classes and method are in the exe as plain text (even if debug info is stripped).
For classnames that may even be true without rtti.
If that is the case (please double check), you may want to run the code through an obfuscator first.
On the other hand keep in mind:
Reverse engineering an entire exe is always a lot of work.
But to overcome a security feature, you may only need a very few lines of source.
Never mind which compiler language was used. If no precautions where taken, it very easy and quick to get a assembler version of the code.
Example: if you have a feature that allows 3 trial runs and then blocks with an error msg.
In the assembler you can quickly find the error msg, and all references to it. It's not hard to find the code where the counter is compared to the limit.
Once you got the assembler statement (and it's offset in the exe, you can use a hex editor, and modify the exe. No need to even recompile.
So more important than the language, is to write the code, in a way that produces assembler that is hard to track.
That does not expose constants. That checks multiple times in different places, and and and...
---
Oh well, and I am *not* an expert on it. So just imagine how many more ways an experienced hacker may have to overcome your security features.