I know a lot about I2C in general, but very little about the Arduino libraries that implement it. So this might not answer your question, but perhaps it will shed a little light on the situation. (And it's too long for a comment.)
I think that the key difference between bus.read_byte() and bus.read_i2c_block_data() is that the former does a simple I2C bus read cycle, while the latter is doing a more complex sequence involving a write cycle, a repeated start and then a read cycle. This is because bus.read_i2c_block_data() is assuming that the slave device (your Arduino in this case) has "registers", and it needs to transmit the register number before it tries to read data from the register.
I spent some time looking at the source code for the Wire library for the Arduino, and it appears to me that this should Just Work. There is a default handler for the write cycle, which should simply stuff the register address into a buffer (which you never look at), and then the read cycle should complete as usual, with the callback to your sendData() function. But perhaps there's some subtlety in the either the library code or the Arduino hardware that's preventing that from happening.
Another issue is that you have basically only one I2C clock cycle (i.e., 10 µs, assuming that the Jetson is adhering to the 100 kHz SMBus clock speed) to prepare the data to transmit on the Arduino side. It's possible that the software overhead in the library and in your callback before you actually call Wire.write() exceeds this, resulting in no data transmitted to the Jetson at all, causing the timeout.
The library documentation is not at all helpful regarding more complex scenarios like this one. And I really don't have time right now to dig into the hardware documentation to see how the hardware would handle this sequence.
bus.read_byte()andbus.read_i2c_block_data()are "master reader" actions.