Certainly it can be done more efficiently, by not constructing copies to pass through a lambda, adding a move or copy.
Just construct directly in the array using the comma operator.
 It can also be done more generally, by allowing for case zero, which is important for generic code.
Yes, that means you must specify the template arguments for the std::array.
As a bonus, it is more concise and might even be more elegant.
#include <array>
#include <type_traits>
#include <utility>
template<std::size_t N, class T>
constexpr auto array_repeat(T&& value)
{
    return [&]<std::size_t... Indices>(std::index_sequence<Indices...>) {
        return std::array<std::decay_t<T>, N> { (void(Indices), value)... };
    } (std::make_index_sequence<N>());
}
 I haven't changed the parameter from T&& to T const& to allow the rare T& copy constructors.
 I haven't used the std::copy_constructible concept, because that requires more than needed here.
I added the necessary includes, which really shouldn't be omitted for a code review.