I would like to know if there is a way to read more data than one byte per operation.
If there is no ready to use library providing such high level feature, then you have to get out of your developer comfort zone, dig into the world of electronics and learn the craft of reading datasheets. For example, if your i2c eeprom device is 24LCxx family (other families are sometimes quite different), then you find
datasheet for it on the net and try to understand as much as you can. For the question you have, you search for the supported features and see what is of interest. Datasheet says that
Byte Write,
Page Write,
Current Address Read,
Random Read and
Sequential Read I2C operations (functions) are available. So, for the most optimal block read/write you should use these 24LCxx internal I2C functions. For sub optimal block read/write you could forget all said, and just use a simple loop to read/write individual bytes. Since I2C protocol is byte based anyway, my wild guess is that in best case optimized read/write is about 2 times faster. If you can live without such speed then you can happily get away with suboptimal simple read/write loop. If speed is important, then you should also check what is the highest speed that your I2C eeprom chip supports and then initialize your I2C channel to that speed. You will agree that reading something with 100kbits/s is not he same as reading it with 400 Kbit/s, 1Mbit/s or 3,2 Mbit/s.
Using BaseUnix may be OK for classic linux developers, but if you find your self in position of translating some existing Arduino I2C library to FPC then you may want to look for something different and microcontroller like programming lib. All other libraries mentioned on that wiki page are like that. I could not find linux example, but on Atmel AVR accessing 24LCxx I2C eeprom looks like
this.
Btw, linux kernel already has
at24 and some other eeprom drivers. It will be good to read some
comments about it first. There is also a custom
at24 block driver so you might want to explore that path, too.