The way that InvokeDynamic works is that the first time the instruction is executed, the appropriate bootstrap method is called. The CallSite object returned by the bootstrap method is executed on this and all subsequent calls to the instruction. The idea is that the VM can handle this more efficiently than ad hoc methods that look up the method every time.
However, this doesn't get around the requirement that all bytecode must be inside a class to be executed. That's just the way the JVM platform works. I'm not sure why you think that creating a new class will incur overhead however. It can be inlined just as well as any other method can. The bigger concern is running out of space in the memory allocated for code due to the extra classes, but I believe Java 7 also provides some library calls to help with that.