Lag and low framerates are not the same thing. A low framerate is simply that, a low framerate, and will not incur a 'lag' (ie: movements and overall time scales slow down).
Now that that's out of the way...
Graphics cards alone are not responsible for low framerates when one is comparing low and high settings; if the player is trying to employ PhysX or any other implementation of physics and doesn't even realise they're enabling such a setting, then their CPU may be taxed by an unreasonable amount. Metro2033 has an excellent example of this in the OpenCL based depth-of-field setting, which still brings many high-end computers to their knees.
There are other aspects to take into consideration that do not necessarily tie directly into the graphics card's raw performance capacity, and that's in the amount of graphics memory that needs to be utilized in order for textures and screen-space processing effects to work. If your card has insufficient memory but an abundance of raw power, it could run many modern games at their maximum settings provided you keep the texture setting and/or post-processing settings such as AA, HDR (which in many games is really just a form of bloom, not real HDR, anyway...), Bloom, motion blur and depth of field are kept at low settings or even turned off entirely.
This is most evident in cards with less than 768mb of ram these days as games running at 1920x1080 with all the bells and whistles can easily fill the framebuffer (RAM) of the card immediately. Windows7 and the DirectX10/11 rendering paths are able to utilize system ram as a fallback, but this is hardly ideal if your system's ram is already saturated anyway, and that doesn't even take into consideration calls from the CPU and GPU both needing to be serviced simultaneously; there simply isn't as much bandwidth left for the GPU to use. Most graphics cards in the mainstream to enthusiast tiers these days are working with over 30Gbps worth of memory bandwidth while most mainstream to high-end computers' system ram offer between 17-21Gbps total bandwidth - see how that can be a bad thing? Running your cards in SLI or crossfire with the hope that combining two 512mb or 768mb cards into 1 or 1.5gb worth of ram doesn't work, either. Each card has to clone the same information for their respective framebuffers (ram. I'll repeat it every time so that there's no room for confusion), so you are not going to be magically doubling your total graphics ram capacity. In general, the higher the resolution you want to play at, the higher your card's ram capacity ought to be to keep up.
A CPU is also not responsible for 'lag' on its own. See the above notes about 'graphics' settings that actually utilize the processor where the graphics card's preoccupied or simply is not responsible for/cannot be the one to handle a particular operation. These days, if you have a processor that's at least of the Core2Duo generation in the E6xxx or greater series or in the Athlon II X3 (tri-core) processor realm, your processor is almost guaranteed to not be responsible for that significant a framerate loss. What is of use however is to use any program that can perform background monitoring of your processor's active time. Task Manager alone can even perform this task for you, you simply have to open it up (ctrl+shift+esc) then head to the performance tab and let it do its merry thing in the background while you're playing your game. When you encounter a section of the game that's causing a particularly low framerate, stick around in that part of the game for a while, trying to keep the framerate low, then alt-tab out of your game (even if it'll 'break' the game) and look at the charts. Are all your 'threads' being utilized in full? Is only one being utilized very heavily? Are your threads not one being utilized in full, but all of them are seeing relatively high amounts of usage?
If only one thread out of several is full, that means the game is not threading optimized and is only utilizing one 'core'. In this case, you could try increasing the frequency of your processor to increase its overall instructions per second (
IPS, see here for a brief explanation) per core. It's extremely important to note here that not all processors are equal when it comes to per-core IPS throughput and that just because a processor has 6 cores vs its 4-core version (such as the Phenom hexa-cores vs the quad-cores) does not automatically mean that it will have greater IPS per core; it can in fact have less on account of running at a lower frequency at stock settings.
If only one thread is running at less than full capacity, there's a good chance there's either a memory bandwidth issue either to system ram or to the cache on the processor, or getting information from CPU to graphics card's RAM (ie: graphics card memory bandwidth constraint); the cache capacity could be insufficient or it could simply not have the bandwidth that stream of instructions would require of it for optimum performance. See the three below links for an example of how different processors from exactly the same generation have different cache amounts. Technically, these processors are all equal, they are simply using different cache amounts and run at different stock FSB/multiplier settings.
Intel Celeron E3400 2.66ghz 1mb cache 800mhz FSB
Intel Pentium E5400 2.7ghz 2mb cache 800mhz FSB
Intel E7300 2.66ghz 3mb cache 1066mhz FSB
All three of these processors are exactly the same, they simply each have 1mb more L2 cache and use slightly different FSB/core multiplier combinations.
All cores being fully utilized? Your system RAM and graphics card(s) are likely keeping up here bandwidth-wise (not necessarily performance-wise, however), and cache is clearly not an issue. The game is making decent use of all available cores/threads, even though such games are extremely rare. At this point you're either looking at a limit in the IPS capacity of your processor or something else may be causing a framerate drop. Few (if any?) games are able to fully utilize processors at all anyway, but let's ignore that for now.
System ram being saturated will NOT result in low framerates. It WILL result in the game getting stuck momentarily from time to time as the system has to perform page-file read/write operations. System ram having insufficient bandwidth WILL result in bandwidth constraints between the processor and the graphics card(s), however, and this can have a detrimental effect on the overall performance of a game; this performance will not always translate directly into a lower framerate so much as it will into stuttering (and stuttering, just like lag, is not the same thing as a low framerate. Michael J Fox doesn't move around super slowly, he jitters around). If you want to see an example of what kind of impact this can have and happen to have access to the computers, go take an old dual-core Athlon system or LGA775 dual-core system with 4b of ram on DDR1 and compare it to the same configuration with DDR2 ram and then to one with DDR3 ram. The LGA775 system can cover all three these bases for your testing purposes.
What you should see is occasional stuttering in games which need to 'stream' high amounts of data from ram to processor and/or graphics card the way the Unreal Engine 3.0 and 3.5 need to do. Examples of games that use this method are Bioshock1/2, Borderlands, the Unreal Tournament games made on the engines, Gears of War 1/2/3.
Now remove half the ram to bring the system down to 2gb and try to run these games at their maximum graphics (and audio) settings. The raw amount of data that needs to be stored for textures, geometry, shaders, AI information, level designs, etc etc etc should quickly saturate the ram (I know that for Borderlands 2gb is barely sufficient at max settings while a 9600GT 512mb in a system with sufficient ram has absolutely no issue handling the game). Prepare to pull your hair out in frustration as these games get stuck at the most inconvenient times and/or level loading takes half a century to complete.
Claiming that the hard-drive is responsible for sudden and potentially lengthy drops in framerate 'before things return to normal' is to be ignorant as to the way games utilize ram and the paging file. You can practically ignore hard-drive performance for nothing other than load times if the game you're playing was able to cache all of its data for any given level into RAM or has good streaming. Want an example of this? Use an old hard-drive with an average of 40mb/s worth of sustained read in the same high-performance system with enough RAM, then compare it to a system with a 80mb/s hard-drive or even a 250mb/s or greater SSD; chances are that there will be no difference except for load times.
Yet another post-padding article... =_=