Knock up belong to a family of CC called displacements. This type of CC extends to other displacement s such as Lee ult, Grag ult, Blitz hook, etc. This family of CC is not affected by Tenacity and has a couple of weird behaviors.
To answer your question, it's the coding. When you get hit by a displacement, not only are you 'stunned', but there is a movement command that is issued. Somewhere in the code there is something that will not allow the removal of this movement command.
EXCEPT if it's overridden by another movement command like flash for example. The QSS effectively removes the 'stun' status and allows you to issue another command that can override the current one.
To make this clearer, let's take a look at the classic Ezreal/Blitz interaction where Ezreal blinks away after being hit by a hook. Ezreal's blink actually has a cast time between pressing the button and actually using the ability. What happens is that Ezreal starts the cast a fraction of a second before the hook hits. The hook connects. Normally, the hook stuns the target, which is true. However, Ezreal has already input the command before the stun affected him. The movement command from the hook tries to pull Ezreal in. Now the cast for his blink finishes and inputs it's own movement command. This new command overrides the older hook movement command and Ezreal blinks away
tl;dr spaghetti code
My theory is that this code is embedded pretty deep in the game engine which is why Riot doesn't fix it. It would probably require a massive overhaul of the entire engine which is a huge project.