Hi,
I managed to map the WP default profile fields, first name and last name in woocommerce by modifying templates/myaccount/form-login.php and woocommerce-functions.php using the following tutorial as a base:
http://tommcfarlin.com/add-custom-user-meta-during-registration/
As per the instructions, I made the following edits:
1. Added the following to form-login.php
<div class="form-row form-row-first">
<label for="reg_firstname"><span class="required">*</span> <strong><?php _e('Firstname', 'woocommerce'); ?></strong></label>
<input type="text" class="input-text" name="firstname" id="reg_firstname" size="30" value="<?php if (isset($_POST['firstname'])) echo esc_attr($_POST['firstname']); ?>" />
</div>
<div class="form-row form-row-last">
<label for="reg_lastname"><span class="required">*</span> <strong><?php _e('Lastname', 'woocommerce'); ?></strong></label>
<input type="text" class="input-text" name="lastname" id="reg_lastname" size="30" value="<?php if (isset($_POST['lastname'])) echo esc_attr($_POST['lastname']); ?>" />
</div>
2. Added the following to woocommerce-functions.php in the function woocommerce_process_registration()
$user_firstname = isset( $_POST['firstname'] ) ? trim( $_POST['firstname'] ) : '';
$user_lastname = isset( $_POST['lastname'] ) ? trim( $_POST['lastname'] ) : '';
and
$new_customer_data = array(
'user_login' => $sanitized_user_login,
'user_pass' => $password,
'user_email' => $user_email,
'role' => 'customer',
'first_name' => $user_firstname,
'last_name' => $user_lastname
);
The thing is that while #1 can be achieved by overriding the woo templates through your theme but I am not sure how to modify / override a specific function. The only problem is that if the plugin is updated, you will lose the changes in #2 and will have to make the changes again.
As far as adding custom fields like "Where did you hear about us" might be possible using the same method above.
Hope it helps!