It's not really a table, it's a collection which is like a list of components. You might know collections from TListView (Items property), TTreeNode (dito), TMainMenu...
You can add to these lists by creating a new TCollectionItem and setting the collection as the owner

MyItem := TCollectionItem.Create(MyCollection);


The problem with all package formats is the fact that in order to add a file to the package (and also when deleteting or modifying files), the package file has to be re-written completely. There are several workarounds for this. You could save the file table at the end of your file which would at least allow you to add files without having to re-write the entire file.

Alternatively (but this is much harder to implement), you could have fixed-size package files. Which means even an empty package file would be like 100 MB. You'd then have to write your own managing routines that split up files added to the package into clusters. When a file is deleted you simply mark all clusters that file occupied with "available". (This is how FAT/NTFS/etc. work) Again, this is very difficult to implement but of course possible.