Yes, it's possible and can be done. Team 341 did it last year.
You can use encoder counts to measure distance travelled, and a gyro reading to determine heading.
Your X/Y positions would be incremented each cycle by distance_travelled_this_cycle * sin(heading) and distance_travelled_this_cycle * cos(heading) (or reverse, depending on how you define X and Y; beware that sin() and cos() don't exist...you have to write them or find someone who did [hint: whitepapers on delphi]).
To go to a position X/Y, simply compare each component with your current position, determine what heading to turn to and how far to drive, and do it.
www.kevin.org/frc has good examples.