It sounds like this would be best implemented by simply altering the stats when you make a purchase. The appearance and representation of the "item" can just be treated as another kind of stat, along with things like speed and size, etc.
So for a shop you'd want to create an interface that shows the next tier of things along with their prices. When one is selected and confirmed you just modify the relevant state. For example, your game state may have a list of current stats like so:
boatSpeed = 3;
bucketSize = 2;
fishingLineStrength = 4;
castingPower = 8;
So let's say you want to have the fishing rod as an item that can be upgraded in the shop. You can have an icon that represents the current rod type, and create a set of icons (the actual image files) then give them names like "rod1.png", "rod2.png" and so on. Then add a variable to indicate which rod the player is using:
rodIDNum = 1;
So when the rod ID is 1 you use the rod1 icon. Then in the shop when the player buys a rod upgrade you just increase the rod ID number and then have a function that loads the new icon and sets the castingPower and fishingLineStrength to the values for a level 2 rod.
The same methodology can be used for buckets, boats, etc.