I wanted to know the reasons why bytecode manipulation on android at runtime isn't possible? Is it because currently there are no supporting libraries for it or is it because the DEX format is something which cant be manipulated
At runtime, after a class has been loaded, the definition of that class can't be modified. This is true for any JVM-like system, including Android's Dalvik. However, you can modify classes after compilation but before inclusion into the APK, which I have done extensively for Android app tools. After the APK is built, you can't make any changes, because the APK is signed to verify the contents of the archive.
Don't be confused with the similar technique in Objective-C called method swizzling which does allow you to effective make changes to object definitions at runtime. The Objective-C runtime is mutable, the JVM runtime is not.
If you have an external dex that you want to modify before it's loaded into an Android app, you can do that as well, but again, once that classes have been loaded by a ClassLoader, they can't be modified.