I think you need to develop a method for finishing songs. One that you can apply to generate a song at will. Don’t conflate being able to construct a song with writing good parts. They are separate skills and both need to be developed.
I think one of the problems here is that you’re requiring the song to be good before it’s finished. Just finish a bad song for practice. Accept that the good stuff might be hiding out in your mind until it’s confident it’s not going to get wasted. Prove to your good ideas that they will get used by finishing a song. Don’t use any of your good ideas, just write from scratch. It will only be difficult if you demand that the individual parts be good. Remind yourself that you will never show this to anyone, and that you are just using the time and effort to learn how to finish a song, not to write your masterpiece. Write a verse, chorus, bridge, whatever you need, and stick them together. Don’t worry about whether they fit together perfectly or not (you’ll be throwing away a lot of interesting juxtapositions if you do). Just crank it out as fast as you can. Congratulations! You wrote a song!
Then come back to it at least a week later and listen to it without a guitar in your hands. Figure out what you like (if anything) and what you don’t. Then get back to work. Replace parts, change melodies, rearrange stuff as necessary until you’re happy. Congratulations! Your song is now good. You wrote a good song!
Then do it again. Since you have at least a week to wait, you can have multiple songs going at once.
Then do it again and again and again. Somewhere along the line, you will feel motivated to modify the process. Possibly to get better results, possibly to be more efficient or to introduce some kind of randomness. (I find that helpful, personally, since I write alone and don’t have other people to bounce ideas off of.) This is your brain figuring out its own songwriting method, which it won’t do until you give it the opportunity. If you keep it up, eventually you’ll be able to crank out songs in your sleep (not that you should), and your method may no longer resemble what I described above. You now have the skill of songwriting that you can apply however you wish.
Again, the important thing is to develop a method for writing finished songs, and then iterate on that method until it generates good songs. If you try to make the songs good on the first try, you’re far less likely to finish them.
Like the songs, the method itself does not have to be good at first. It just has to generate songs that you can work on revising. Same pattern for the songs as for the method: start with something bad, iterate until it’s good.
FWIW, in almost any creative endeavor, I find it very useful to break the creation step into two parts:
- Create a bunch of material uncritically (don’t even think about whether it’s good).
- Combine, revise, and restructure the material until you’re happy.
You can go back and forth between 1 and 2, but don’t mix them. Step 1 must be done with your inner critic turned all the way off. (The best ideas sound dumb at first. This teaches you how to trust yourself.) Step 2 requires your inner critic to be turned all the way up. Accept that your first draft will be crap, and don’t let that bother you.
If you find that you can just sit down and crank out a good song, excellent, you don’t need to do any of this. But if you don’t, I’ve found this approach to be reliable, both in terms of writing songs, and more broadly in terms of teaching myself new creative skills without a teacher or a lesson plan.