GetSongPos() doesn't update nearly often enough for tracked songs. Maybe once every track (?). Not very appealing for high-energy songs with a lot of beats in every track.
If you're patient enough, you can time things out just fine with HookTimer. Most songs have a regular beat, so as long as you get everything set up right (HookTimer and PlaySong as close together as possible), you're gonna be covered on most machines. As long as the timer starts at the same time as the song, even slow machines will synch up just fine.
Here's some simple pulsing action, every second or so:
http://www.verge-rpg.com/aen/code/beat/beat.zip
With a little elbow grease anybody could double up on some of the beats, add a few things here and there and get plenty of simpatico with a complex beat going.