Trees should work like so; there is a tree, a stem/special-leafblock, and a fruit. The fruit should be kinda flexible, to allow for different quality of fruit. The tree is similar, doesn't have many, if any arguments passed to it. The tree should probably have some arguments to tell where to put stems/special-leafblock in the tree foliage depending on time/season/nearby resources (like say, water. More water= more stems). Now for the real magic. The stem is gonna do all the work, so it should be carefully made. The stem should be highly customizable. For one, stem should be able to take on any shape or texture, as for stems should be left up to the moder to customize. So a stem can have many stages, it is up to the specific stem. For short hand, lets call stage one, blossom. A blossom is the block formed when the tree is generated. Blossom decides how things will play out. It's job is to use information to alter itself and the fruit. So, a blossom should check for the following, time/season/daylight. If these are all to the moder's likings, said moder can pass a command to the blossom to change texture and state. Now the blossom has some values changed that tell it that it's ready to produce. Blossom, now producing-stem, does the following. It grabs information about the environment. Biome, state of current fruit, weather, Season, time of day, temperature, sunlight exposure, nearby resources, nearby biomes etc. The moder can do what ever with these values. Let's say, when the the values are right, it creates the fruit block. The fruit block has the value of "immature". As everyday passes, the stem gathers environmental data to customize the fruit, until it deems it ready for whatever. Perhaps when ready, the moder tells the stem to drop the fruit, and revert to stem stage one. This will not be limited to fruit, it can be any block really. So yes, if you wanted, you could make ore trees that produce better ores in better weather.
Here are some examples of what moders could do. if bees and another tree within same radius from itself to bee exists, create hybrid. That's one example. Another example would be if the stem if in colder biome, it makes the apple more potent for cider, or something. Or, if ancient Indian burial ground block exists within X blocks, stem produces evil fruit/rots current fruit.
Of course the stem would have access to it's own values (break, drop, right click, use). If the moder deemed fit, he could not make an external fruit block, and make the fruit be the drop item of the stem, and have the stems break function produce a new stem. (useful for bushes bushes and trees that should should not have stems/limited leaves.
in short. the stem block is a highly customizable block. It has access to lots of environmental/world data. It can change it's own values, or alter values of blocks around it. It should have support for many logic statements.