Theming user_profile_form (the user edit form)
Aside from using the Display Suite module, most methods for theming forms require a bit of code to be written. In the following method I define variables from the form that can be outputted in a template file to fit whatever HTML structure you'd like. I put all of my code in template.php, but you can just as easily make a custom module to do this. 


Add a hook_theme() implementation

function YOURTHEME_theme($existing, $type, $theme, $path){
  return array(
    'user_profile_form' =&gt; array(
      'render element' =&gt; 'form',
      'template' =&gt; 'user-profile-form',
      'path' =&gt; drupal_get_path('theme', 'YOURTHEME') . '/templates', 
      //add '/templates' only if you store template files in an additional folder
    ),

  );
}


This tells the Drupal theming system that there's a template file waiting for it in YOURTHEME/templates. 
Next we'll define some variables to pass into that template in a hook_preprocess_HOOK function. We can find the structured array of the form in $variables['form'] and assign the form elements to the variables we'd like to throw around our tpl.php file.

function YOURTHEME_preprocess_user_profile_form(&amp;$variables) {
  $form_inputs = array(
    'account' =&gt; $variables['form']['account'],
    'picture' =&gt; $variables['form']['picture'],
    'actions' =&gt; $variables['form']['actions'],
  );
  $variables['rendered'] = _YOURTHEME_form_variables_render_all($form_inputs);
}

function _YOURTHEME_form_variables_render_all($elements) {
    //Create array to return, with element name as key and element as value
    $elements_array = array();
    //For each element, render it and add it to the array
    foreach ($elements as $key =&gt; $element) {
        $elements_array[$key] = render($element);
    }
    //Return array
    return $elements_array;
}


This example will put the general account info fields, the user picture upload field (if pictures are enabled), and the submit actions into a variable called "rendered."
Now that we have defined these variables, we can output them in a template file. Create a template file named user-profile-form.tpl.php in 'YOURTHEME/templates'. This is a demo example:

&lt;div id="new-form"&gt;
  &lt;?php echo $rendered['picture']; ?&gt;
  &lt;?php echo $rendered['account']; ?&gt;
  &lt;?php echo $rendered['actions']; ?&gt;
  &lt;input type="hidden" name="form_id" value="&lt;?php print $form['#form_id']; ?&gt;" /&gt;
  &lt;input type="hidden" name="form_build_id" value="&lt;?php print $form['#build_id']; ?&gt;" /&gt;
  &lt;input type="hidden" name="form_token" value="&lt;?php print $form['form_token']['#default_value']; ?&gt;" /&gt;
&lt;/div&gt;



Notice the hidden form fields at the end; these include vital Drupal tokens that help secure forms from attack. Your form won't work without them.

When you visit your user edit page, you should now see only some general account info fields and the picture fields. Create different variables in the preprocess function to separate out form elements and place them wherever you wish in the user-profile-form.tpl.php file, adding whatever markup you like.