I just ran in to this problem too. This is how I solved it.
I'm using one of WPCF7's filters to alter the posted data before it is validated:
function alter_wpcf7_posted_data( $data ) {
if($_POST['cpcm'] == "E-mail") {
$_POST['tel'] = "Contact by email";
}
if($_POST['cpcm'] == "Phone Call") {
$_POST['tel'] = "Contact by phone";
}
return $data;
}
add_filter("wpcf7_posted_data", "alter_wpcf7_posted_data");
That way, WPCF7's validation stage will think that the hidden field was in fact filled in.
Note: I haven't tested the code above specifically, but you should get the idea :)
Edit: The above code goes in the functions.php file of your theme