Extracting 'hot columns' into a separate table
The behaviour you're describing is called MVCC (Multi version concurrency control). Strictly saying it's not delete + insert. It is more like: 


copy current version of row
update as requested
append new current version to a chained list of version


In the background this history is being cleaned up depending on how old your oldest transaction is. If you have long running transactions the history can grow pretty big. 


  This is not postgresql specific. It's a very common method across
  many databases to handle conccurrency. To see more: MVCC in Postgresql


Therefore it does make sense to move such "hot column" to a separate table.  Especially if the row size is significantly bigger than the size of the "hot columns".

Be aware though it has some implications on the select performance: 


If these columns are present in your queries for filtering or sorting query time will take a hit
To retrieve these columns you need to join the table which again has some impact on time


There is an alternative method of splitting where your main table contains only the small, filtering and sorting columns (including these columns too) and "data" is stored separately.

It's always best to try which works best for your dataset and query patterns. I did a benchmark about a year ago comparing one big table with two splitting strategy that can help you get started: http://charlesnagy.info/it/postgresql/split-or-leave-frequently-updated-column-in-postgresql