Get custom_user meta value and add entry

You need to pass get_user_meta a third parameter to prevent it from returning an array. That is where the mistake is, not with the add/update functions.

$invoice_meta = get_user_meta( $_GET['id'], 'invoices', true);

You will need to clean up any data already in the database or the existing nested arrays will still cause trouble.