As I wrote in https://github.com/podhrmic/paparazzi/blob/rt_paparazzi/sw/airborne/arch/chibios/mcu_periph/spi_arch.c#L217 ChibiOS SPI driver currently doesn't provide any callback about the transaction.
This is rather unfortunate, but for the time being I just assume that if there spiExchange finished, the transaction was successful (SPISuccess). It is unfortunate also because there is no timeout on transaction, so SPI transaction can potentially suspend the thread indefinitely (i.e. no SPI interrupt happens). We are working on it, but it will take imho a few weeks to upgrade the ChibiOS driver. On the other hand, it is no worse than I2C libopencm3 driver potentially halting the system #531 

As far as event functions go - in my understanding they were developed to service asynchronous IO (basically all libopencm3 based drivers are asynchronous). Since ChibiOS has most peripherals synchronous, events are not needed anymore. I can emulate event behaviour by introducing extra threads and event listeners, but it is extra complexity which is not needed for synchronous calls.

So I just reused the paparazzi event() calls in the periodic functions as it provides the same functionality. I can't really think of a better option.