Baldur - speaking as a programmer who's trying to put something like this together;
* Many spreads - no problem. The kicker is to write something that can be expanded if the user has a new spread they'd like to put into the collection. Although that's possible, it's messy.
* Many decks - this one is a problem. Not because one couldn't add graphics and interps, but because of copyright problems. One of the reasons I developed my own deck was so that I could do this type of program without having to hassle the copyright issue. If you're doing it right, and use multiple decks, then you need contracts that spell out what percentage of the price of each program sold goes to each copyright holder. And if they want money up front, this can make it altogether impractical.
* Deal, shuffle, seeded shuffle - no problem for the first two, but the third requires more complex programming to get away with.
* Many options (reversal/non-reversal and so on) - no problem at all to let someone enter the general percentage of reversals they'd like in a reading, from, say, 0 to 50, but what does "and so on" mean?
* A complete library of interpretations - by whose definition? The best I've been able to come up with is to let people add interps themselves, and that can get hairy in itself. You could fill a CD or two with nothing but interps and never get all of them.
* A keyword function - Could you be just a bit more specific about this? For searching through the interps, or what? And how (and how often) do you see yourself using a function of this type?
* A diary * A notebook - I may just be too limited in my perspective, but isn't this like saying "let's build a hook on the bathtub to hang a flowerpot"? Certainly you can include just about anything in any program, but this is the type of thing that's much more likely to be sold separately , maybe with a calendar and a few other bells and whistles.
* Advanced statistics - specifics?
* Being editable - depends on what it is you want to edit. It's generally not possible to have the program itself editable, unless you're writing in javascript or another uncompiled language. Even then, it's not a great idea, because this is one area where a little learning is a dangerous thing - it's much easier to get a program to be unworkable than not.
* Fun and functional - sure, but by whose definition? This one is so much a matter of the user's background and preferences that all you can do it make some guesses.