Most mocking frameworks do rely on some form of IOC. This is because IOC is in fact a good practice. Aside from testing, imagine you have a class that looks up a database connection (rather than injecting it), and now the class of database connection changes. You shouldn't have to recompile your code - you should just be able to change the injected dependency. From a testing perspective, you could do the same thing, inject a mock database service.
To get more toward your question. I would focus on gradually refactoring to an injection instead of a hard coded lookup framework. Start with the big pieces, like databases and other 3rd party services. As you refactor them out, you can use any mock framework (I've used EasyMock and I like it, but there are others - JMock, Mockito). These frameworks do not require wrapper classes, but generally rely on proxy objects. When you create a mock, you are actually creating a proxy (which is an instanceof the class type you are mocking).
Bytecode manipulation (Aspect Oriented for example, as Typemock uses) can be dangerous to rely heavy on. Often times you might have other tools that also manipulate byte code (code coverage tools frequently do this) and multiple bytecode manipulations can cause unexpected behavior.
Lastly, you can look at languages like Groovy. Groovy works well with Java (it gets compile to bytecode) and has mocking built right into the language. Some Google searches for mock objects with Groovy should return some good results.