Если я не ошибаюсь и понял правильно вопрос, то проблема стоит в том как определять и вести учет тех сообщений что человек прочитал и того что не прочитал. Буду исходить из того что база форума MySQL.
Вообщем-то можно просто вести учет того времени когда человек в последний раз бывал на форуме а также в запись времени в таблице на каждое собщение, и запись времени на последние изменения темы и форума.
Теперь допустим зашел зарегестрированый пользователь и запускаешь весь механизм проверок, делается проверка у какой темы последние изменения произошли позже того времени когда в последний раз был человек на форуме. Эти темы естественно помечаются как новые, а данные о них пишутся в базу даных, типа таблицы (назовем ее для примера new_themes) где будет учетная запись о темах которые еще не прочитаны, после того как записи с идентефикацией новых тем записались, обновляем время последнего пребывания (чтобы можно было потом проверять если внеслись новые темы или сообщения с момента нахождения человека на форуме). Зашел человек в тему, делается проверка если тема есть в new_themes значить она новая, но раз человек в нее зашел то она уже как бы прочитана и стирается с new_themes.
И так каждый раз как человек открывает страницу с темами идет или главную страницу форума, идет проверка если сообщение было написано позже последней пометки о пребываний тема вносится в таблицу new_themes, после всех внесений и проверок время пребывания пользователя обновляется тоже (ато вдруг кто-то написал во время пока пользователь на форуме). А зашел человек в тему или в сообщение, запись о теме просто удаляется из new_themes.
Также по тому же принципу, можно вести и учет в каком форуме или теме (вернее в разделе форума) было последнее изменение и показывать его как новое.
Ну а на какой странице темы находится новое сообщение (или новое из ряда сообщений ) так это просто, ищется самое маленкое по времени сообщение из числа новых, и дается на него ссылка, а на какой странице это уже определяется легко, ты ведь знаешь сколько у тебя сообщений на страницу, и сколько сообщений вообще в теме, вот и определишь на какой странице его показывать.
Это было с зарегестрироваными пользователями, а не с зарегестрироваными, так делай просто типа регистрации для незарегестрированых пользователей (по IP адрессу), а потом в туже таблицу по тойже системе. В следующий раз когда зашел человек, просто смотрится IP, если другой то все по новой, если тот же то проверяется время последнего пребывания и тд..., с незарегестрироваными можно также хранить их последний IP в куки, а потом по ним проверять, нашел куки или старый IP, ага значит человек не стер их и уже был тут, а не нашел относишься к нему как к новому.
П.С: вообщем-то криво написал, но надеюсь что идея понятна и поможет. Просьба не судить за граматические и стилистические ошибки .