One way would be to extend the User class, but given your requirements, I think the simpler approach would be to utilize "User Settings", represented by the UserSetting class. (If you edit a user in Revolution and click on the Settings tab, you’ll see a table of these custom settings .)
How you get at them programatically is pretty simple. The User class and the UserSetting class are already related in the MODx model.
To get a collection of existing UserSetting objects:
$settings= $modx->user->getMany('UserSetting'); // this was modUserSetting before beta3 - thanks splittingred
Note that $modx :: getUser already does the above, and stores the key/value pairs of all the UserSettings in $modx->_userConfig
To create a new UserSetting object, associate it with a particular User, then save it:
// create the user setting
$setting =& $modx->newObject('UserSetting');
$setting->set('user', $user_id); // actually I don't think this line has to be included if you associate the $setting with a modUser as below.. please correct me if I'm wrong anyone
$setting->set('key', 'the_key');
$setting->set('value', 'the_value');
// associate it with a User
$user->addOne($setting);
// save it
$setting->save();
// .. or this should also work..
// $user->save();
edit: See discussion below for information on accessing the UserSettings via $modx::getOption and reloading the config before doing so.