Nope, may-halt? doesn't exist.
(I don't think a direct proof by diagonalization would be less complex than the proof that the Halting problem is undecidable; otherwise that would be the standard example. Instead, let's reduce your problem to the Halting problem:)
Suppose there was a program may-halt? p, that decides if program p halts for some input. Then define:
halt? p x := may-halt? (\y -> if y==x then p x else ⊥)
where the thing in braces is a derived program. Lets break it down:  
halt? p x := may-halt? p'
where p' is the program that (i) on input x computes p x, (ii) on any other input just loops around without terminating:
p' y := if y==x then p x else ⊥
Then may-halt? p' outputs true if and only if p x terminates. 
Thus, for any program p and input x, halt? p x would decide if p x terminates. But we know that that isn't possible, so may-halt? doesn't exist.