I've got some plant men in my project. They are not that tough but they give out a cloud of spores when hit.
I'm trying to include a lot of different types of monsters which have different behavior and attack types rather than just a bunch of progressively tougher enemies.
These plant creatures for example won't usually attack unless you get too close, but the 'diseased' variety (the brown ones) start out crazed and will attack anyone they see, even other monsters if they are the closest threat.
Some roguelikes have a set of effects that can be set on the player, like dazed, diseased, poisoned etc... I hope to make good use of that to include a bunch of secondary effects.
I think using dictionaries for map data is a great idea for roguelikes. Most computers now can handle the extra drain and it makes things much more flexible. A tile can contain almost anything, and you can set traits of a tile on the fly, allowing spells or effects which can change the layout of the level. Imagine being able to place lava on a tile by hand, or "zap!" a wand of pit traps!
Unless your level is like 500x500 tiles in size I don't think you're going to get performance issues. Even then you could crop the areas which is active, not performing checks on creatures or items which are outside the active radius.