If you're clever, you can "pause" the execution of main thread at process's entry point then create new thread for your tasks before resuming main thread :P.
those api's require a seperate process / driver to run before you execute the .exe or .dll your trying to protect , so not really self contained..
anorther nice trick is to fill the PE with serious invalid Data places where you can..to make Debuggers crash or fail to load the application ..but windows wont mind. i cant remember an example right now..but there is a few :) , as to execution of Code before OEP ..i think sadly not orther then the options mentioned