Are there lossless data compression techniques that do not exploit repetitive patterns?
Modeling data compression as a combination of statistical modeling and encoding seems a bit obsolete these days. In many compression algorithms, the most important step is combinatorial modeling, which finds structure in the data and uses the structure to transform the data into something that can be compressed with statistical methods. For example:


Burrows-Wheeler transform permutes the characters based on the lexicographic ordering of the suffixes starting after them.
Algorithms in the Lempel-Ziv family describe the text in terms of exact and/or inexact repeats.
A graph can be described in terms of bicliques (subgraphs with an edge from every node in vertex set $A$ to every node in vertex set $B$).
A text can be represented by a context-free grammar.
A collection of similar strings can be described by the edit operations required to transform a reference string into each of the individual strings.
The collection can also be described by a finite automaton recognizing a more general language, plus the paths used to produce each of the strings.
A suffix array has self-repetitions, where each pointer in the source substring is incremented by 1 in the target substring.
A (multi)set of integers can be represented as a binary sequence.


In principle, one can describe these combinatorial models in statistical terms, but the statistical viewpoint may not be very useful. Furthermore, many practical algorithms skip the statistical modeling/encoding part completely or do them in a naive way, as decompression speed may be more important than maximal compression.

All of these methods take advantage of the redundancy in the data or make it more explicit for the subsequent compression steps. After all, data compression is basically just getting rid of the redundancy in the data.