Suppose you have a FooProxy, and a subinterface SubFooProxy (extends FooProxy), respectively mapped (@ProxyFor) to, say, Foo and SubFoo (extends Foo) domain objects.
You have a method with a return type of Foo/FooProxy but which could return a SubFoo/SubFooProxy. If SubFooProxy is never, ever, referenced directly in any method on a RequestContext or another proxy, then RF won't even know about its existence, so your returned SubFoo will always map to a FooProxy.
@ExtraTypes allows you to reference types that wouldn't be referenced otherwise. Putting @ExtraTypes(SubFooProxy.class) anywhere (really, it absolutely doesn't matter where you put the annotation) will tell RF about SubFooProxy, so a returned SubFoo will be mapped to a SubFooProxy.