Metamorphic techniques aims to provide to applications the ability to physically change their code without moving away from the given objectives. This means that the actual code and structure of the application is dynamic and subject to changes, but what the application want to do remains unchanged. If your program objective is, for example, to perform some mathematical operations or manage I/O streams, then it will continue to do that and produce the same results… but how it will reach this objective changes.
Why shall an application perform such transformation on itself? Well, this technique has been developed some years ago (lot of years ago, actually) to primary fool Antiviruses. This is actually one of the techniques which makes the level of harm of viral applications to rise to higher level, because basically invalidates Antivirus signature databases, which are the most important information used to locate and later put in quarantine or delete viral infections in your PC. Together with polymorphic engines (see my introduction to them here), they are the actual methods to allow your application to run undetected on an Operating System.