Our reach counts are broken down into 24hr segments, added together to make a total (for example, past 30 days). We call this daily Reach. What this means is that while we can know if the same user sees your post more than once in a day, we can't carry over knowledge of that user to the next day. So while Instagram will only count this user once (as 1 x Reach) over the 30-day time period, we will count them multiple times as 1 unique daily Reach.
Scenario 1: John sees your post once each day for 3 days.
Iconosquare shows: 3 reach, 3 impressions.
Instagram shows: 1 reach, 3 impressions.
Scenario 2: John sees your post twice a day for 3 days.
Iconosquare shows: 3 reach, 6 impressions.
Instagram shows: 1 reach, 6 impressions.