Look again at FilterRequest#getRunner.  Rather than storing the failures in an out-of-band field that needs to be later queried by JUnitCore, FilterRequest returns a Runner that will report the error when run, so there's no requirement for the calling infrastructure to know about a special error-storage facility.

If JUnitCommandLineParser encounters an error, then createRequest should, instead of returning the normal request it would build, return a request that wraps a ErrorReportingRunner.

Does that make sense?