How to pass variable from block and access in it twig template
Can someone explain this behavior to me?

The render array returned by the build method in the block plugin does not have a theme or type. This means that it will default to markup (iirc). The theme/template is not being used because the render array does not specify to use it.

You can find an example of implementing render arrays on drupal.org's documentation page, Render arrays. This explains the default element properties.

How to pass variable from block and access in it twig template?

The render array should have the #theme element property set to the theme definition key.

  public function build() {
    return [
      '#theme' =&gt; 'more_topics_rollout',
      '#title' =&gt; $this-&gt;t('More Topics'),
      '#body' =&gt; 'My body',
      '#description' =&gt; 'My description'
    ];
  }