ModuleId and ModuleGuid both identify an instance of a feature, like an instance of an Html feature, or google map, or an instance of the blog feature.
The purpose of the moduleGuid is as I said before it comes in handy when you want to have ratings, at the module level. ModuleId is the real primary key but ModuleGuid is also a unique identifier of the instance. For some features this is the only identifier, but for more complex features like the blog we have an ItemId and ItemGuid for each blog post. The Guid is again for the same purposes mentioned. So for a blog the moduleguid represents the whole blog and the itemguid represents a blog post.
The Html feature has an ItemID but it isn't used (maybe that is what is confusing you), only ModuleId and ModuleGuid are used in the Html feature but those extra columns were from a long time ago when I thought I wanted to have multiple items in the html feature. At some point the extra columns may be removed.
So whether you need item level ids depends on the feature. For the forums feature it goes even deeper because a forum instance can have multiple forums each with an id, and each forum also has threads with a thread id and posts with post id. The forum is the only feature where I have not yet added guid columns as additional keys.