I tested it with all primitive data types and arrays, plus some typedef'd struct data, and it all worked fine.
Example code to store data:
addr += EEPROM.put(addr, myFloat);
addr += EEPROM.put(addr, myInt);
And to retrieve data:
addr += EEPROM.get(addr, myNewFloat);
addr += EEPROM.get(addr, myNewInt);
You pass the variable name where you want the data to end up into the function.
Both put and get will return the number of bytes stored/retrieved, so you can easily increment your address counter to store many variables.