I am going to explain the few I know about this topic.
There are variuos types of program encryptions.
First, the basic and old xor'ing method, which xors all the bytes of the executable and puts them after a "stub" which xors them again, so the original code is got, and then executes it (
http://evilzone.org/c-c/%28c%29-simple-crypter-stub/).
This method is easily detected, so xor'ing was replaced by more complex encryption algorythms.
Decrypting the executable, writing it to the hard disc, and then execute it makes it easier to detect by AVs, so the next step was executing it directly from memory. This requires a good knoweldge of the executable file structure (PE/ELF). You have to virtually build all the file headers, and then launch the in-memory decrypted executable code.
After this, there are other methods, like obfuscating the code. This is done by adding garbage wich confuses AVs (and people who might try to debug it. This answer to one of your questions: executable files encryption makes things a lot harder for reverse engineers, if done properly.
To detect malware, AVs have two methods: static analysis and runtime analysis (heuristics). The first one simply checks for pre defined data chunks in the file (called signs) and if found, it says malware found. The second one is more complex, and it is based on a control of what the program is doing. If it detects that a program tries to open another process memory and touch its memory in the winapi zone (give a look to this:
http://evilzone.org/hacking-and-security/injecting-code-in-another-process/msg936/#msg936), it will say that it is malware.
About an EZ crypter, it will be great. But I think we will had to learn a lot before making something decent.
I had some tutorials and info sheets about this topic, now I don't have access to them, but if I find them I will upload.
I think that is all