The repetition operators * and + are greedy: they always match as much as possible. Therefore, if .* or .+ is at the right-hand end of a regex it will always match to the end of the line (at least it will in TextPad, in which . doesn't match a newline). So the $ in .*$ or .+$ is redundant.
When I wrote the $ in .*$ or .+$ is redundant
I should have written the $ in .*$ or .+$ should always be redundant
Matches (in left-to-right text) are always constructed from left to right. $ anchors the right-hand end of the match (or part of it) to the end of something—in TextPad, to the right-hand end of a line or the end of the file. .* at the end of a regex matches up to the first thing that . doesn't match—in TextPad, the right-hand end of a line—or the end of the file. A single match is attempted from the current position and constructed towards the right. If that fails the position is advanced one place to the right, a new attempt to match is made, and so on. A repeated match is a repeated attempt to make a single match, and the same left-to-right rule for those single matches applies, regardless of the direction of the repetition. After each successful single match the current position is moved one place to the right or left, depending on the repetition direction, and a new single match is attempted. (If the direction is leftwards the engine will not search to the right as far as the position of the previous match, so that it doesn't loop.) The important point is that it is the position of the left-hand end of the matches that moves, not the right-hand end. If a $ matches anywhere other than the end of a line or the end of the file, the regex engine (or the code that calls it) is behaving incorrectly.
What I'm seeing is different from what you're seeing. Here (TextPad 6.1 on Windows 7) the behaviour of leftward repetitive searches with your regex and similar regexes does not depend on whether those regexes end with a $. This is as it should be. However, the behaviour does in some cases depend on whether Wrap Searches is selected. When not selected, the behaviour of leftward searches of these regexes is sometimes incorrect. When selected, the behaviour seems to be always incorrect. Try .+