Ok so there's 3 parts to this: displaying an array, modifying arrays, and saving arrays.
It sounds like you have a solution for displaying, so I'm not going to touch on that much, since there are many different ways to do so depending on how you want it too look and feel.
My main advice would be to use seperate 2d arrays instead of a 3d array, since you want to be able to modify them individually. For example in your fifth point, you want to remove an item from one array upon adding it to another. If you were to delete the xth row in a 3d array, it would delete that row across the entire z axis as well.
So start with organizing the arrays you want as seperate objects, displaying them, and modifying them as needed as 2d arrays.
For saving, you can get an entire array's content as a string with the array.asjson expression. Save this string to a local storage key for loading later with the array object's load action.