saying "&ref x is not an extending pattern" does NOT mean "binding by &ref x cannot extend the drop scope of a temporary value". it depends on whether the temporary value is an extending expression or not.
in fact, in many common use cases like let &ref x = &temp();, it indeed extends the tempoary value's drop scope.
an counter-example can be found in the same section of the reference you quoted, where the drop scope of the temporary value is NOT extended:
let &ref x = *&&temp();
// if you try to use `x`, you get an error `E0716`:
// temporary value dropped while borrowed
//println!("{}", x);
however, if you write bind it to an extending expression, the temporary value's drop scope is extended:
let &ref x = &*&temp();
// this works
println!("{}", x);
one way to think of it, ref x "simply" binds to the scrutinee, no matter what type it is, it always suceeds; but &ref x can only be matched agains a value of a reference type, so in some sense it "destructures" the scrutinee value and the variable name x is a "sub-pattern" so it doesn't binds to the "whole" value.
IMO, the precise definition of extending pattern and extending expression in the reference manual is confusing. the reference should not be interpreted as the "specification" of the language. in fact, rust doesn't have a specification officially. rather, the reference is mainly to explain the current behavior of the compiler. but sometimes, it does a bad job (at explaining some aspects).
in practice, rustc --explain E0716 should give enough clue to solve most drop scope related compile errors.