Как использовать один билдер запросов с разными параметрами?
Простого способа нет.
Можете попробовать так$builder = function($params) {
	return Client::join('emails', 'emails.client_id', '=', 'clients.id')->whereIn('email', $params]);
}

foreach($cs as $c){
	$res = $builder(['a@a.a', 'b@b.b'])->get();
}
Как вариант делаем билдер с основным запросом:$builder = SomeModel::query()->where('....', '......')->.... ;
а для повторного использования юзаем так сколько угодно раз:with(clone $builder)->where('....', '.....');