Perhaps you better think about breaking the problem into two than trying to solve it using one algorithm.
A characterโs movement consists of two components: selecting high-level goals and finding a path, as well as local management. Pathfinding solves the problem "I'm here and I need to know how to get there." Local steering solves the problem of "I am there and someone was just bothering me."
Save your way as you do now. What needs to be added is the ability of the characters to detect obstacles when moving along this path, and then adjust this local part of the path to avoid the obstacle.
The book "Artificial Intelligence for Games" (authoring site: http://ai4g.com/ and Amazon: http://amzn.to/k9K62F ) contains several ways to combine path searches with collision avoidance. This paper also describes high-level steering algorithms well. The highly effective method that I implemented is the steering pipeline, also known as cooperative arbitration.
Any complete answer will depend on your worldwide representation and other factors specific to your implementation, but I hope this helps.
source share