Where are the HTML fields kept?

You’re right, they don’t go in the DB.

This is what I got in the vardefs when creating the field with a value (given in Studio, not in the Edit view):

cache/modules/PGR_PgrCustomModule/PGR_PgrCustomModulevardefs.php

    'html_c' => 
    array (
      'inline_edit' => '',
      'labelValue' => 'html',
      'required' => false,
      'source' => 'non-db',
      'name' => 'html_c',
      'vname' => 'LBL_HTML',
      'type' => 'html',
      'massupdate' => '0',
      'default' => '<p>Some value.</p>',
      'no_default' => false,
      'comments' => '',
      'help' => '',
      'auto_new' => '',
      'auto_edit' => '',
      'importable' => 'true',
      'duplicate_merge' => 'disabled',
      'duplicate_merge_dom_value' => '0',
      'audited' => false,
      'reportable' => true,
      'unified_search' => false,
      'merge_filter' => 'disabled',
      'len' => '255',
      'size' => '20',
      'default_value' => '<p>Some value.</p>',
      'studio' => 'visible',
      'dbType' => 'text',
      'id' => 'PGR_PgrCustomModulehtml_c',
      'custom_module' => 'PGR_PgrCustomModule',

So, there’s the answer to your original question: the field only has a default value, not a variable value, and it is set in Studio, and saved in the vardefs.

EDIT: For some reason, I don’t see the value being shown in the Detail view. But it’s there in the Edit view (non-editable). This is likely a bug…