From the RFC Section 1:
OAuth 2.0 [RFC6749] public clients are susceptible to the
authorization code interception attack.
In this attack, the attacker intercepts the authorization code
returned from the authorization endpoint within a communication path
not protected by Transport Layer Security (TLS), such as inter-
application communication within the client's operating system.
Once the attacker has gained access to the authorization code, it can
use it to obtain the access token.
...
To mitigate this attack, this extension utilizes a dynamically
created cryptographically random key called "code verifier". A
unique code verifier is created for every authorization request, and
its transformed value, called "code challenge", is sent to the
authorization server to obtain the authorization code. The
authorization code obtained is then sent to the token endpoint with
the "code verifier", and the server compares it with the previously
received request code so that it can perform the proof of possession
of the "code verifier" by the client. This works as the mitigation
since the attacker would not know this one-time key, since it is sent
over TLS and cannot be intercepted.
The crucial phrasing here is: "proof of possession of the 'code verifier' by the client. This works as the mitigation since the attacker would not know this one-time key, since it is sent over TLS and cannot be intercepted."
TL;DR:
The code challenge+verifier pair is the crucial thing that proves the client requesting the authentication token is the same as (or trusted by) the client who requested the authorization code in the first place. If the code verifier is leaked, then the attack mentioned here in the RFC (essentially a malicious app leveraging cross-talk to impersonate a legitimate app) is not mitigated, and thus the purpose of PKCE (to prevent such an attack) is thwarted.