You need an algebraic CRISPR for your work. :)
A general strategy is to replace the expression you want to collect with a dummy variable, collect the dummy variable, and reverse the replacement. A complicating issue here is to deal only with the linear part of the polynomial numerator and denominator. On the one hand, Collect[] won't be needed since Plus[] will handle it automatically; on the other hand, one has to take care not to make replacements in the nonlinear terms. There are four combinations, of which only three are sought. I show all four anyway:
expr = (8 + 4 x1 + 2 x2 + x1 x2)/(-8 - 2 x1 + 4 x2 + x1 x2);
vars = {x1, x2};
Clear[t]; (* dummy variable *)
Join[
{{"num replacement", "den replacement", "result"}},
Flatten[
Table[
{num -> t - First@DeleteCases[vars, num],
den -> t - First@DeleteCases[vars, num],
(** main algorithm **)
Divide @@ MapThread[
Replace[Expand@#1,
c_. #2 /; NumericQ[c] ->
c*t - c*First@DeleteCases[vars, #2],
1] /. t -> Total[vars] &,
{NumeratorDenominator[Together@expr], {num, den}}
]},
{num, vars}, {den, vars}],
1]
] // Grid // TeXForm
$$
\begin{array}{ccc}
\text{num replacement} & \text{den replacement} &
\text{result} \
\text{x1}\to t-\text{x2} & \text{x1}\to t-\text{x2} &
\frac{\text{x1} \text{x2}+4 (\text{x1}+\text{x2})-2
\text{x2}+8}{\text{x1} \text{x2}-2 (\text{x1}+\text{x2})+6
\text{x2}-8} \
\text{x1}\to t-\text{x2} & \text{x2}\to t-\text{x2} &
\frac{\text{x1} \text{x2}+4 (\text{x1}+\text{x2})-2
\text{x2}+8}{\text{x1} \text{x2}+4 (\text{x1}+\text{x2})-6
\text{x1}-8} \
\text{x2}\to t-\text{x1} & \text{x1}\to t-\text{x1} &
\frac{\text{x1} \text{x2}+2 (\text{x1}+\text{x2})+2
\text{x1}+8}{\text{x1} \text{x2}-2 (\text{x1}+\text{x2})+6
\text{x2}-8} \
\text{x2}\to t-\text{x1} & \text{x2}\to t-\text{x1} &
\frac{\text{x1} \text{x2}+2 (\text{x1}+\text{x2})+2
\text{x1}+8}{\text{x1} \text{x2}+4 (\text{x1}+\text{x2})-6
\text{x1}-8} \
\end{array}
$$
Note: Together@expr could be just expr, if it can be assumed that expr is already "together" in a single, simple fraction; likewise Expand[] is not needed in this case because the numerator and denominator of expr are already expanded. But if one uses Together@expr, then one needs to Expand[] the denominator since it may be factored by Together[].
[Note: I don't know if other people see this problem, but in edit mode, the TeX table above is displayed properly. Out of edit mode (the normal browsing mode), the TeX table appears as a single line.]