Following normal troubleshooting procedure, in the absence of other data (e.g. using some of the device's status registers will give useful information) I formed some hypotheses for possible causes, checked those possible causes in the ST LSM6DS3 datasheet and some example code (see below) and found a problem. (There could still be more problems - troubleshooting is often iterative - but you need to fix this one.)
You are missing an initialisation setting - see below.
Without that setting, the accelerometer will not put any readings into the FIFO. In that case, as you have seen, the FIFO threshold interrupt cannot be triggered, since the FIFO is not being filled with readings and so it can never reach its threshold value.
Instead of doing all the work to decide how I would initialise the device, I reviewed an existing library from SparkFun, which also initialises the FIFO, as you want to do (some existing libraries ignore the FIFO). The main C++ course file is here:
Based on my review of the device datasheet, application note, and comparing that library's initialisation code to yours, I found the missing setting below which explains your symptom of "no FIFO interrupt".
FIFO_CTRL4 needs to be set to a non-zero value.
This is explained in Application Note AN4650 on the LSM6DS3 where it says on page 90:
It’s required to set at least one of the four decimation factors to 1 (no decimation).
Since neither of those are in your list of initialised registers, they will both be at the default value of zero meaning that no readings (gyroscope or accelerometer) are being put into the FIFO.
I expect that you will want to set
FIFO_CTRL3 to 0b00000001 (i.e.
DEC_FIFO_XL0 = 1).
If you still have problems, do more comparisons with the SparkFun code (I have stopped at the first problem I found) and use the device status registers to find out what is happening to the device in more detail, regarding any new problem you find.