Updating meta_value in a custom key

The problem is this line

$sales = get_user_meta($_POST['repID'], 'sales');

change it to

$sales = get_user_meta($_POST['repID'], 'sales', true);

The last parameter says, that you are getting a single value – an array. Otherwise you get an array inside another array.

https://developer.wordpress.org/reference/functions/get_post_meta/

EDIT:
After reading the comments, as you have the meta in multiple rows, you should do update_post_meta in the foreach loop:

$sales = get_user_meta($_POST['repID'], 'sales');

foreach ($sales as $key => $sale) {
    $old_sale_data = $sale;
    if($sale['reg'] === $_POST['carReg']) {
        $sale['approved'] = $saleStatus;
         update_user_meta( $_POST['repID'], 'sales', $sale, $old_sale_data);
    }
}

https://codex.wordpress.org/Function_Reference/update_post_meta

Btw., saving the sales as user meta in array isn’t a great idea, unless everything you’re going to do with the data is displaying it. Doing queries on the data, searching, reporting, all that will be almost impossible with data saved this way. You’d be better creating a custom post type sales ad saving the meta for each of the sale, or even better creating a separate db table for sales