Scheme's main abstraction mechanism is procedural abstraction; we define procedures that represent common operations, and "specialize" those procedures by passing arguments: by passing different arguments,w we can make the same routine do somewhat different things, depending on the particular data it encounters at run time.
Since Scheme procedures are first-class data objects, we can customize procedures in terms of other procedures. We can write a general procedure with a "hole" in it, to be specialized by another procedure.