My own hit list:
The simple ones you must have:
color: colorize output from commands like diff and status, which makes it easier to assess.
pager: browse long output a page at a time.
fetch: pull, update and merge from another repo in one step.
graphlog: display revision graphs in your shell, incredibly useful for looking at the branches in your log history.
hgk: browse the repository with a graphical interface (see also TortoiseHg and Murky)
If you enable pager, you should configure it to not interfere with certain commands:
[pager]
pager = LESS='FSRX' less
ignore = version, help, update, serve, record
The intermediate extensions I highly recommend (and use frequently):
record: lets you interactively select hunks of files to commit - perfect for when you are in the middle of one set of changes, and you end up fixing something that should have its own commit.
extdiff: configure an external diff tool (such as meld)
share: have multiple clones use the same repo history
The Advanced extensions I would not be without:
mq: manage a stack of patches. Very powerful, allows layering of patches on top of the tree.
notify: send email notifications when a repo is changed.
rebase: reapply local changes on top of a new parent revision.
largefiles: work with large binary files outside the hg store
All the above are bundled with Mercurial, and are stable and well-tested. I highly recommend all of them.
Non-core extensions worth investigating:
shelve: selectively put aside changes (at the granularity of hunks) and restore them.
acl: selectively allow access to different parts of the repository tree
Superseded extensions and migrated to core (info from @durin42):
forest was been superseded by the subrepo support introduced in v1.3
bookmarks is in core and always enabled
transplant is superseded by graft, a core command
histedit is in core as of v2.3, but is disabled by default
inotify is not recommended, as there is apparently a bug due to a race condition