you don't need to register the map source (in fact, you can't, it's not possible with the public API) - you just need to create it and then use it. The mepbox.py demo is in principle what you need. With all the caching etc. the C version of the code which creates the map source should look something like this (I've only compiled the code and haven't tried it, hopefully it's alright):
static ChamplainMapSource *
create_cached_source (void)
{
ChamplainMapSourceChain *source_chain;
ChamplainMapSource *tile_source;
ChamplainMapSource *error_source;
ChamplainMapSource *memory_cache;
ChamplainMapSource *file_cache;
guint tile_size;
ChamplainRenderer *renderer;
ChamplainMapSourceFactory *factory = champlain_map_source_factory_dup_default();
renderer = CHAMPLAIN_RENDERER (champlain_image_renderer_new ());
tile_source = CHAMPLAIN_MAP_SOURCE(champlain_network_tile_source_new_full(
"mapbox",
"mapbox",
"YOUR_LICENSE_TEXT",
"YOUR_LICENSE_URI",
0, //min zoom
19, //max zoom
256, //tile size
CHAMPLAIN_MAP_PROJECTION_MERCATOR,
renderer));
tile_size = champlain_map_source_get_tile_size (tile_source);
error_source = champlain_map_source_factory_create_error_source (factory, tile_size);
renderer = CHAMPLAIN_RENDERER (champlain_image_renderer_new ());
file_cache = CHAMPLAIN_MAP_SOURCE (champlain_file_cache_new_full (100000000, NULL, renderer));
renderer = CHAMPLAIN_RENDERER (champlain_image_renderer_new ());
memory_cache = CHAMPLAIN_MAP_SOURCE (champlain_memory_cache_new_full (100, renderer));
source_chain = champlain_map_source_chain_new ();
champlain_map_source_chain_push (source_chain, error_source);
champlain_map_source_chain_push (source_chain, tile_source);
champlain_map_source_chain_push (source_chain, file_cache);
champlain_map_source_chain_push (source_chain, memory_cache);
return CHAMPLAIN_MAP_SOURCE (source_chain);
}