If you want to store any kind of metadata from an application level add-in with a specific document, you can serialise data to some kind of string (base64, xml etc.), and save it in a "very hidden" sheet. A worksheet with visibility set to "very hidden" will only be accessable via the programming API, so even if the user uncovers hidden sheets they will still not be able to access it, or indeed even know that it is there.
// create sheet for this save
workbook.Sheets.Add();
newSettingsWorksheet = workbook.ActiveSheet;
newSettingsWorksheet.Name = hiddenSheetName;
newSettingsWorksheet.Visible = Excel.XlSheetVisibility.xlSheetVeryHidden;
One important thing to note, if you are storing a string longer than 32767 characters (the max number of characters that fit in a cell) then you will have to cut it into chunks and spread it across several cells.
Regarding the COM exceptions you are experiencing, you should be aware that Excel can throw a COM exception for ANY request that touches a COM object (e.g. a worksheet, a cell, or anything belonging to Excel) at ANY time if it is busy with another request (e.g. user is typing, it is recalculating formulae). Exceptions you can expect are:
HRESULT: 0x800AC472 (ignore)
HRESULT: 0x8000101A (retry later)
I guess the Excel app developers do this so an add-in can't make Excel itself look bad / unresponsive.