I needed the same thing, so I thought I'd share my solution.
In hook_form_alter():
// Check that this is a simplenews form and the user is anonymous
// If so, add an Unsubscribe button with a custom submit handler before the
// default simplenews form submit handler is called
if (strpos($form_id, 'simplenews_block_form') !== FALSE && $user->uid == 0) {
$form['unsubscribe'] = array(
'#type' => 'submit',
'#value' => t('Unsubscribe'),
);
$form['unsubscribe']['#submit'] = $form['#submit'];
array_unshift($form['unsubscribe']['#submit'], 'custom_simplenews_form_unsubscribe');
}
Then the custom submit handler will be something like this:
function custom_simplenews_form_unsubscribe(&$form, &$form_state) {
// Change action to unsubscribe and exit so the simplenews handler will take over
if ($form_state['clicked_button']['#value'] == 'Unsubscribe') {
$form_state['values']['action'] = 'unsubscribe';
$form_state['values']['submit'] = 'Unsubscribe';
}
}
So, when control is passed to simplenews_block_form_submit() in simplenews.subscription.inc the user will be unsubscribed using the module's workflow.