I've got bits and pieces of LR mapped out, so I knew that the function at 0x39100 is the function that gets called to use a powerup. (using the 1999nodrm adresses here).
I then debugged this function to see what function called it whenever the player used a powerup after finishing, and ended up in this in this function:
(Screenshot from IDA, note that this is only the last part of this function)
In green, I've circled the part where the game checks if the racer has finished the race. (I didn't know beforehand that this particular bit indicated having finished the race, but I knew this address stored some flags).
If the racer has not finished the race, the jz jump is followed (the green arrow), and the code checking for 3 white bricks is skipped.
If the racer has finished the race, the jump is not followed (red arrow), and the amount of white bricks is checked.
In my above posts, I've instructed to change the jump in purple to NOPs, ensuring that the game always follows the red arrow, thus ending up calling the powerup function instead of skipping it.
By the way, this check is only done for green powerups, the other 3 powerups follow the remaining 3 arrows pointing into the 'call powerup' block.