Is it true that CCK has no API to work with from other modules?
No, it's not true.

CCK does its field processing when node API hooks are invoked, so when you (or another system process) call node_save(), CCK will run through the node object and save any field values it needs to. 

For example, this code would load a node, change the value of a field called field_my_field, and then save that to the database:

$node = node_load($nid);

$node-&gt;field_my_field[0] = array('value' =&gt; 'Some new value');

node_save($node);


There are also CRUD functions in includes/content.crud.inc which will come in handy to create fields and instances on the fly.