return message after hook_form_submit without Ajax
The form API and message system are not the same thing, even though there are helper functions in the FAPI to produce messages - you don't return a form with a message, you set a message when it's appropriate to do so. That might be when the form is being built, when it's being validated, after it's been submitted, and so on.

Generally speaking, if you're setting a validation error, use form_set_error() in a validate callback:

function MYMODULE_form_validate(&amp;$form, &amp;$form_state) {
  if (something_wrong_with($form_state['values']['foo'])) {
    form_set_error('foo', 'Run away, bad things happening');
  }
}


If you want a confirmation message on form submission, use drupal_set_message() in a submit callback:

function MYMODULE_form_submit($form, &amp;$form_state) {
  if ($form_state['values']['foo'] == 'bar') {
    drupal_set_message(t('You chose: %foo', array('%foo' =&gt; $form_state['values']['foo'])));
  }
}


There's no point returning anything from a form submit callback - it will be ignored. If you want to rebuild the same form again after submission, use:

$form_state['rebuild'] = TRUE;


It may or may not be necessary depending on your final goal.