how to echo all tables that start with a prefix

You could try changing the output type of get_results() to ARRAY_A or ARRAY_N and see what kind of array they give you.

E.g.

$tables = $wpdb->get_results("show tables like 'pro_hist%'", ARRAY_A);
var_dump($tables);
foreach( $tables as $table ) {
    var_dump($table);
}

If $table is an array and it has the name as the first value, then get the it for example with array_shift().

From the Code Reference,

wpdb::get_results( string $query = null, string $output = OBJECT )

$output

(string) (Optional) Any of ARRAY_A | ARRAY_N | OBJECT | OBJECT_K
constants. With one of the first three, return an array of rows
indexed from 0 by SQL result row number. Each row is an associative
array (column => value, …), a numerically indexed array (0 => value,
…), or an object ( ->column = value ), respectively. With OBJECT_K,
return an associative array of row objects keyed by the value of each
row’s first column’s value. Duplicate keys are discarded.

Default value: OBJECT