You are not doing tables justice

You think that tables should only be used to display tabular data, right? For instance, the contents of a database table, because a HTML table should only be a reflection of the kind of information that can be put in a database table.

Microsoft's ASP.NET has a HTML control called GridView, that can do exactly that. You can tell it which database to use and which table to display, and if you call it up on the screen, it is implemented as a HTML table and the result can look like this: (Disclaimer: any similarity with real persons exists only in your own imagination.)

IDNameAddressCity
1John DoeFirst St.New York
2Jane DoeSecond St.London
3Jon DoeThird St.Paris
4Jean DoeSecond St.Munich

That would be OK in your book, wouldn't it?

Now the GridView control can not only display data from a database table, it can also let the user modify it.
You can put the control in Edit Mode and then it looks like this:

IDNameAddressCity
1John DoeFirst St.New York
2
3Jon DoeThird St.Paris
4Jean DoeSecond St.Munich

Would this still be fine? Is this still a correct use of a HTML table? If so, OK. But if not, I wonder how you would implement this. Would you fake a table?

Anyway, we can, of course, also use this method to let the user add a new record to the table.

IDNameAddressCity
1John DoeFirst St.New York
2Jane DoeSecond St.London
3Jon DoeThird St.Paris
4Jean DoeSecond St.Munich
5

And we can even do this without showing the existing records

IDNameAddressCity
5

or the ID, which the user doesn't need to see...

NameAddressCity

Still with me? Still think you can use a HTML table for this? OK.

Now let's flip the table around, so that columns become rows and rows become columns.

Name
Address
City

Or, without the gridview styles

Name
Address
City

And there we have it, your basic input form for data, implemented as a table. Now what was your complaint again?