Object sealing is shallow, so if you have a root property, you can dynamically add and delete properties from that property.
Adding/removing properties dynamically can reduce performance in modern JS engines, so the engine tries to enforce static object properties by sealing objects. I think we eventually turned that off though due to sealing ironically having a performance impact on some other JS engines Still best practice is to keep a static set of object properties. For a dynamic data structure though there's no problem with adding/removing properties, since that's what it's for.