I would probably find an appropriate database to use as well, but if you want to DIY, one thing you could try is to create, as Dave suggested, one large sparse file with space pre-allocated for each "subfile", and then grow that file periodically (by creating a new, larger sparse file and copying the data from the old file into that one) as your subfiles start to fill up. If your subfiles grow at the same rate, you can uniformly increase the main file size (e.g. double it); otherwise, you'll need to come up with a reasonable algorithm for determining how much to grow the file when a subfile fills up (e.g. you probably don't just want to increase the size of just that one subfile, otherwise you'll be doing this expensive operation more than you'd like; you might at the same time increase the size of any other subfiles that are over a certain threshold full).
Anyway, sounds like a fun project to hack around with. Good luck.