Question: Long and short is really in the question title. For a language which compiles to an intermediate language like MSIL or Java byte-code, if there's concern about something like reverse engineering or hacking to disable security features, should AOT (ahead of time) compilation be considered rather than just obfuscation? Obviously, there's a bit of wiggle room in this question as there's no one answer I wouldn't imagine, but when would you start looking at performing an AOT compilation before distributing something versus sending it out obfuscated?

For anyone that stumbles across this and isn't familiar:

Wikipedia Entry on AOT Compilers: <http://en.wikipedia.org/wiki/AOT_compiler>

Mono AOT Compiler feature: <http://www.mono-project.com/AOT>

Answer: 
Don't distribute. Expose via the web or something like Citrix. Bloomberg have built a multi-billion dollar business doing that and their users love it. (Well we don't seem to be able to provide much comfort with AOT or Obfuscation).
It'll be a lot harder to maintain different versions. You should either use a language like C++ or if you're stuck with Java, you can use a custom class loader instead of just obfuscating. All code can be RE'd with time; I'd just trust the law to do your work for you and obfuscate.