Here is my own un-golfed answer in C. I'm sure someone can beat it:


    #include <stdio.h>
    #include <string.h>
    #include <assert.h>
    
    int tailrep(char *str, char *sub, int sublen, int len) {
        if (str == sub) {
            return 1;
        }
    
        int i;
        for (i = 0; i < sublen; i++) {
            char *a,  *b;
            a = str + len - sublen;
            b = sub + sublen - 1;
            
    //        printf("%p->%c %p->%c\n", a - i, a[-i], b - i, b[-i]);
            if (a[-i] != b[-i]) {
                return 0;
            } 
        }
        
        return tailrep(str, sub - sublen - 1, sublen + 1, len - sublen);
    }
    
    int istailrep(char *str) {
        int len = strlen(str);
        if (len < 3) {
            return 0;
        }
        return tailrep(str, str + len - 1, 1, len - 1);
    }
    
    int main() {
        // must be false
        assert(!istailrep(""));
        assert(!istailrep("a"));
        assert(!istailrep("aa"));
        assert(!istailrep("aab"));
        assert(!istailrep("abcbbc"));
        assert(!istailrep("abcdabcdabcd"));
    
        // must be true
        assert(istailrep("aaa"));
        assert(istailrep("abb"));
        assert(istailrep("abcbcc"));
        assert(istailrep("abcdbcdcdd"));
        assert(istailrep("abcdebcdecdedee"));
        printf("yay\n");
        return 0;
    }