A sub-table is a property of an object that is effectively a list, with no limit on the number of entries
Example 1: Perhaps you wish to record which languages your users speak. To do this, you could utilise a sub table as a property of the Contact object, call it "Spoken Languages" and let the User select the languages they can speak. One user may have English, another may have English, Spanish, French and Elvish (!). The first user would only have one entry in their Spoken Languages table, the second would have four.
Example 2: If you wish to record the scores that a User achieves each time they play a game. There is no retriction on the number of times that the User plays the game - large or small. Each time the user plays the game the sub-table might record the time / date, the score, time played etc. (whatever fileds you decide to add to your sub-table).
Sub tables are similar to normal tables, they can be used as a data source for grids. So you could see the Users list of languages on a grid by first creating a datasource that uses the sub-table property of that object type, which you then bind to the grid. You can add new entries to the grid by allowing "Add" on the grid and having a default interface set up for the sub table.
The attached video runs you through the process of creating a sub table property and shows its' use in a front end form.