Hi Vikas,
First you have to understand than the Store module is a general purpose e-commerce module. Your needs are too specifics and could probably not be managed by any e-commerce module. On the other hand, you could create your own version with the source code. By doing this, you will not be able to upgrade on future versions without reapply your changes. The last beta versions available at
Codeplex are stable and already manages virtual products (downloadable).
It is rare that a customer wants to pay several times for the same product, especially if it knows that it can download it at all time! :-) In the Store module, you define for each product how many times it can be downloaded or define an unlimited download. Downloads are managed by the Store Account module, from one place your customer can look at his order history and downloads. When you will update the file, your customer will be able to download it from the same place because files are managed by ID inside DotNetNuke.
Concerning the product visibility by role it's an already requested feature by other users. But that's not so simple! For small store like yours, it could be done, but for larger ones it will be too slow. Because before display a product the module need to verify if the user account is in the corresponding role and this is time consuming. Currently the Store module is compatible with all DNN versions from 4.6.2 to the last 5.6, because of this I can't use new .Net features like Linq. In the future, the module will be only compatible with DNN 5.x versions. At this point, I could consider this kind of feature. If you have just a few roles, you could create separate page visibles only to certain roles and place a Store Catalog module on each of them. Because you can define a default category in the Store Catalog module, you could then limit some products by role.
Gilles