1) Depends on how you want to split the data. Most likely, you will need to have a characteristic for each of your "10" items, and either splice all of the array items into the same field within the characteristic, or split it up so each has its own characteristic that contains it.
2) When you receive a read request, there is a handle value indicating what is being read passed throught the eventParam pointer. See documentation for the BLE events associated with the read function. The documentation also explains the exact process, but I believe you can receive the event, process the data in some way, then send the new/old data to the android app. Tldr; Yes. This is possible/setup easily.
3) You can structure each item in the array as a service, with the characteristics contained within it. But ultimately, in order to "simplify" things as you are describing it, I would suspect that you either need to hide it in some way on the app, or have fixed names/fields that can all be unique.
Thank you for your comments. I think that number 2 will probably work the best. I will test this out.