How to add delete button to file field upload widget that actually deletes the file (not just association with content)?
The file should be deleted, if it isn't there is something going on. When a submit button fires, file_managed_file_submit($form, &amp;$form_state) is triggered:

// No action is needed here for the upload button, because all file uploads on
  // the form are processed by file_managed_file_value() regardless of which
  // button was clicked. Action is needed here for the remove button, because we
  // only remove a file in response to its remove button being clicked.
  if ($button_key == 'remove_button') {
    // If it's a temporary file we can safely remove it immediately, otherwise
    // it's up to the implementing module to clean up files that are in use.
    if ($element ['#file'] &amp;&amp; $element ['#file']-&gt;status == 0) {
      file_delete($element ['#file']);
    }
    // Update both $form_state['values'] and $form_state['input'] to reflect
    // that the file has been removed, so that the form is rebuilt correctly.
    // $form_state['values'] must be updated in case additional submit handlers
    // run, and for form building functions that run during the rebuild, such as
    // when the managed_file element is part of a field widget.
    // $form_state['input'] must be updated so that file_managed_file_value()
    // has correct information during the rebuild.
    $values_element = $element ['#extended'] ? $element ['fid'] : $element;
    form_set_value($values_element, NULL, $form_state);
    drupal_array_set_nested_value($form_state ['input'], $values_element ['#parents'], NULL);
  }