Is there a way to prevent recursive triggers with generic devices?

You don't need to remove them, but you need to add some custom code to ignore them unless needed.

You'd basically need to store the previous state and compare it to the new received. You can easily define variables outside of the analyzeDeviceInput function to store such state. Here is a simple example:

var previousButtonState = -1;
function analyzeDeviceInput(targetDevice, reportID, reportDataHex) {
    let reportBuffer = buffer.Buffer.from(reportDataHex, 'hex');
    let newButtonState = reportBuffer.readUInt8(1);
    if(newButtonState !== previousButtonState) {
       //only trigger on change of specific byte
    }

    previousButtonState = newButtonState;

    bttGetNextEvenWithoutChange(targetDevice, reportID)
}