To keep a track of state on its master node Hive has a relational database. If you have a partitioned table, the partitions are stored in the database(this allows hive to use lists of partitions without going to the file-system and finding them). These sort of things are the 'metadata'. If you drop a table, Hive returns the state it absolutely was in before you dropped the table. If you run the query 'select * from jay' after you drop jay, hive will tell you the table doesn’t exist. This happens as you have told hive to forget that table.
So, internal tables are used when we want Hive to completely manage table and the data. While the external tables are used when the data is also used outside of Hive.