How do I use render() for my custom content?
There is no magic framework involved (just magic array structures). You just need to build up your array (Or in your case, extend $node->content in hook_node_view() if you want to alter how a node is displayed).

Basically, a render array is a nested array with properties (always start with a #) and child-elements, which are assumed to be another render-array. drupal_render() will then dig itself through and convert it to HTML.

There are basically three things you can do, define a #type (types are defined in hook_element_info(), see system_element_info) including the necessary properties, define a #theme function and the necessary properties or just simply #markup, which is simply going to print whatever is in it (Note that #markup actually #type => markup, which is added automatically)

A basic example:

&lt;?php
$render_array = array(
  '#type' =&gt; 'cointainer',
  '#attributes' =&gt; array('class' =&gt; array('your-class')),
  'child_element' =&gt; array(
    '#markup' =&gt; t('Some text'),
  ),
  'a_table' =&gt; array(
    '#theme' =&gt; 'table',
    '#rows' =&gt; $rows,
    '#header' =&gt; $header,
  ),
);
$node-&gt;content['your_module'] = $render_array;
?&gt;


Assuming that the node template uses render($content), this will result in &lt;div class="your-class"&gt;Some text&lt;table&gt;...&lt;/table&gt;&lt;/div&gt;

You can also directly return such an array in a page callback function, see userpoints_list_transactions() for an example.

I have a feeling that you are however asking the wrong question: Note that is only for rendering, you can not store anything in this structure. To store that, you should first create the necessary fields on your content types and put your data in it, if you don't want it to be just text within the body. Also have a look at Display Suite, which gives you a lot of control on how to display your fields.