No, this is not possible because of the fundamental way that USB works. A USB device can only talk to the host when the host asks it if it has anything to say. The host in charge of who gets to talk. When you have an IN endpoint the host must poll your device regularly to check if the device has anything to say.
I have programmed the PIC18F4550 before and I know if you configure your IN endpoint to send NAKs, you don't have to handle an interrupt every single time the host asks for data from the endpoint. I suspect you are configuring the endpoint to send zero-length data packets when in fact you should configure it to send NAKs. A NAK response can be handled by the USB SIE without any intervention from your firmware.
There are, however, blocking commands you can use to read data from USB. They are blocking commands from the perspective of your Java program, but in the hardware they are implemented using polling of the USB device. I have not used "Libusb Java" but I know that libusb 1.0 supports blocking commands such as libusb_bulk_transfer
.