The customer cart is persistent across sessions, and the cart items are always stored in the database. The session is only storing a token, to bring up the cart from the database when needed (see Thelia\Core\HttpFoundation\Session\Session::getSessionCart() method).
To add additonal field to a cartItem, just write a module which manages your additional fields in its own table, with a foreign key to the cartItem table, and write the related loops and hook to display these items in the front-office template.
More information about modules here: http://doc.thelia.net/en/documentation/ … index.html