We can assume that all edge weights are positive, and that you can enumerate the edges leading outwards from a vertex, and likewise the edges leading inward, in O(1) time.
For example, you can perform Dijkstra traversal (or A*, with an admissible heuristic) and mark each vertex's distance from the start until you locate the end vertex, then recurse over these markings in reverse as they describe the possible predecessors on an optimal path. That is, for each possible predecessor, you can determine if it was found on the greedy optimal path if the difference between marked distances is equal to the weight of the edge that connects them.
When looking at possible predecessors, the cost of the incoming edge plus the difference between the optimal distance to each vertex is equal to the loss of optimality incurred by including this edge in a solution (zero for edges on optimal paths). So perhaps the question becomes: How can this best be extended to yield all possible paths ranked by decreasing optimality? Is there a clean way to perform a best-first traversal over this kind of meta-graph?
This seems like the right direction to go for a useful solution. Perhaps a useful thing to keep in mind is that if the part of the path you have explored so far is potentially part of a solution that is suboptimal by at least x, checking for cycles need only be done along the last x distance visited (any path suboptimal by x cannot possibly contain a cycle longer than x).
Is there a more efficient approach?
As a bonus question, is it also possible to do this on a graph (of known size) with negative edge weights? Does it become more difficult if negative cycles are introduced? (Remember, as we are looking only for acyclic paths this does not necessarily mean that the optimal solution runs away.)