1) See my and Romans answers in following question some days ago: Junction Table with mutiple primary keys
2) That's simple - you should add next join not to model itself, but to previous "join"
$j_fields = $services_model->join('fields');
$j_values = $j_fields->join('values'); // $j_fields here not $services_model
You an also define second condition (values.service_id=services.id) somehow, but to tell the truth I don't have working example ready to post. You have to use $model->dsql->andExpr() as far as I remember.
I guess you can make it using addCondition (moving that condition to WHERE) or by using DSQL, too.