I'm honestly still not convinced.
Your method works, and I'm not going to question that. It's also simple and easy to understand.
However, I do think it's possible to do this without making the squares be there (even if invisible). I have a screenshot on page 1 showing how I'm trying to do it, although for some odd reason it fails after a certain point and begins saying all remaining squares on the board do not exist, and I'm not quite sure why.
Another reason is because I don't want to have to populate the entire board when creating a pregenerated board state. I want to be able to place the squares (aligned to grid, of course) and not have to place invisible ones in order for the array to work.
Sure, it is possible, but it will take a whole different approach. Just making some squares invisible is the simplest way to do what you want. Don't really see why placing invisible squares is a bad thing, takes about 5 seconds. :)
Creating a level could be like this :
Create row of 20 squares
Select all, and copy paste them as 15 columns
Make some squares invisible if necessary
But you know better yourself what you want your process to be, this is just how I would create something like your screenshots at first post suggest.