If you're using a custom storage engine, don't change the value of the dataDirectory option. If you set it to null, the storage property isn't initialized so you get that error attempting to read 'on' of undefined.
steam-tradeoffer-manager uses the same storage scheme as steam-user, but they don't share the same instance. You need to register your save and read events on your TradeOfferManager instance the same way you registered them on your SteamUser instance.