You can try with a backtracking. In each step for one of 'leaf' vertices decide how many 'out' edges to use.
function add_some_vertex_edges(leaves, edge):
if |leaves| == |V|:
num_of_MSTs += 1
return
v = leaves.pop() # takes one vertex and removes it from leaves
let v_edge be set of incident edges to v that are not already in edges and that don't make cycle if added to edges
for each combination of edges from v_edge:
add_edges(leaves + incident_vertices, edges + edge_combination)
add_some_vertex_edges({v}, {})
Since vertices degree is <= 3, for each leaf one edge is used to 'enter' it, and because of that |v_edge| <= 2, and because of that search tree is narrow.
Worst case running time is O(2^n), but probably in practical cases it is fast. There are examples with worst case number of MSTs. Example that I can think of is with two parallel lines of vertices and connections between them.
O---O---O---O---O---O---O---O---O---
\ / \ / \ / \ / \ /
X X X X X ...
/ \ / \ / \ / \ / \
O---O---O---O---O---O---O---O---O---
In this example there are exactly 2^(n/2) MSTs. To calculate this, take 2 leftmost vertices. They can be connected to the rest of a graph in 4 ways.
O---O O O O O O---O
\ / \ / \ /
X X X
/ \ / \ / \
O---O , O O , O---O , O O
For each group of interconnected 4 vertices there are 4=2^2 possibilities to choose from.