There's already a number of answers for this question but I have tried to provide a very simplistic approach. Hopefully identifying to devs the array structure expected by Drupal when returning your block content.
To do this I have broken the question down into separate code examples as such,
/**
* Implements hook_theme().
*/
function examplemodule_theme() {
return array(
'examplemodule_output' => array(
'variables' => array(
'title' => NULL,
'content' => NULL,
'popular_content' => NULL,
),
'template' => 'templates/examplemodule-sweet--block',
),
);
}
Please see a full explanation here drupal 7 creating theming custom blocksdrupal 7 creating theming custom blocks